如何在Bash中复制两个目录交集内的文件至dir_2?
Bash 实现双向共通文件复制到 dir_2 的最简方案
需求说明
你的目录结构如下:
dir_1 - file_a - subdir_0 - file_b - file_c
dir_2 - file_a - subdir_0 - file_b
目标是把同时存在于 dir_1 和 dir_2 里的文件(示例中为 file_a 和 subdir_0/file_b)从 dir_1 复制到 dir_2。
最简命令:用 rsync 一行搞定
这是最简洁高效的方式,直接利用 rsync 的专属参数实现需求:
rsync -av --existing dir_1/ dir_2/
-av:归档模式(保留文件权限、时间戳等属性)+ 详细输出,自动递归处理子目录--existing:仅同步目标目录(dir_2)中已存在的文件,完美匹配"只复制双方共通文件"的要求
如果不需要详细输出,去掉 -v 参数即可:rsync -a --existing dir_1/ dir_2/
备选方案:基础命令组合(无 rsync 时用)
若环境未安装 rsync,可以用系统原生命令组合实现:
comm -12 <(cd dir_1 && find . -type f | sort) <(cd dir_2 && find . -type f | sort) | while read file; do cp "dir_1/$file" "dir_2/$file" done
find . -type f | sort:递归列出目录下所有文件的相对路径并排序,确保comm能准确对比comm -12:只保留两个列表中都存在的行(即共通文件路径)- 循环读取每个共通路径,从 dir_1 复制到 dir_2 对应位置
内容的提问来源于stack exchange,提问作者James Shapiro
相关产品推荐
相关产品推荐

