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

Linux复制文件夹直接用cp-r。

目标路径不存在,自动创建。
目标路径存在,默认合并内容。

cp-rmy_folder/home/user/backup/。

保留权限时间戳,用cp-a。
-d:不解引用链接。
-R:递归目录。
--preserve=all:保留所有元数据。

覆盖时用-i,手动确认。
-i:交互式覆盖。
-u:比目标新才复制。

路径带/,只复制内容。
无/:完整目录到目标。
有/:内容到目标,不含目录名。

先手动试,再脚本用。
别瞎写,自己掂量。

linux 怎么样复制文件夹内所有文件到另一个文件夹

说白了,用cp -r复制文件夹最简单直接,但想只拿文件不拿文件夹,就得写个shell脚本。
这事儿复杂在参数和逻辑判断上。

先说最重要的,脚本通过递归遍历源文件夹,用ls -a列出所有内容,包括隐藏文件。
比如去年我们跑那个项目,有3 000个文件分布在1 0个子目录里,光用cp -r会连同那些备份文件夹一起拷走,挺麻烦的。
另外一点,脚本里continue和if [-d]这些判断是关键,能过滤掉"."和".."这些特殊目录。
还有个细节挺关键的,每次递归都会cd进子目录再cd回上一级,这保证了路径处理的准确性。

我一开始也以为直接cp文件就行,后来发现不对,得用绝对路径,不然目标目录不在同一级时会报错。
等等,还有个事,脚本用递归容易栈溢出,如果源文件夹特别深,比如有1 00层子目录,就得加个限制。

建议先在测试环境跑一下脚本,用find命令预处理一下文件列表也是个好方法。
说实话挺坑的,但掌握后能省不少事儿。