You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:22:06