Linux如何复制文件夹? cp命令复制目录的递归参数使用技巧

说白了,在Linux上复制目录时,只需要使用cp并添加参数即可。
但如果参数使用不当,很容易出问题。

先说最重要的-r。
去年我们跑监控系统备份项目的时候,刚开始用cp就失败了。
我们必须添加 -r 来进行递归复制。
例如,如果目标不存在,cp -r logs/ /backup/ 将自动创建一个目录。
如果存在,则将其合并。
这一点特别实用。
另一个重要的细节是,末尾有斜杠的路径与没有斜杠的路径具有不同的结果:有斜杠的,仅复制内容,但没有斜杠的,也会复制目录。
在去年的测试中,由于这个错误,整个备份池几乎被覆盖,所以一定要检查命令执行的结果。

还有另一个重要的细节。
当使用-a保留属性时,比如移动用户数据,权限和所有者必须一致,否则-a救不了你。
当时有一个项目忘记换属主了,我就复制了一下,立马报错。
说实话,这确实是一个骗局。

一开始我以为-i和-u都可以防止覆盖,但后来发现这是错误的。
-i 用于交互式确认,每次都必须键入 y,-u 用于增量更新。
例如,cp -ru old/new 仅当旧版本比新版本新或者新版本不存在时才会进行复制。

提醒:在脚本中编写路径时,斜杠会导致目标目录层次结构混乱。
建议先手动运行cp -r test/./backup/看看效果是否正确,然后再编写脚本。
很多人不注意这一点。

您应该首先为全局交互范围配置别名 cp='cp -i',这更安全,但请记住在调试期间将其更改回来。

Linux中cp和scp命令的使用方法

Linux 中的 cp 和 scp 命令非常有用。

cp命令:
目的:在同一台计算机上复制文件。

格式:cp [选项] 源目标或 cp [选项] 源...目录。

常用选项:
-a:完整复制,带有目录和权限(递归)。

-r:递归复制目录。

-f:强制覆盖目标文件。

案例:
cp a.txt b.txt:复制文件。

cp -r dir1 dir2 :复制目录。

scp命令:
目的:使用ssh跨计算机备份。

格式:scp [选项] 源目标。

常用选项:
-v:显示进度和错误。

-C:压缩传输。

-P:指定远程端口(不要与rcp混淆)。

-r:递归复制目录。

案例:
从本地到外部:scp a.txt user@ip:/bane。

从远程到本地:scp user@ip:/path/a.txt..
复制目录:scp -r dir user@ip:/path。

注意:
外部文件必须具有读取权限。

防火墙已关门?使用 -P 指定,例如 scp -P4 5 8 8 user@ip:/path/file。

你自己明白吗?