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

Mac Terminal下如何复制包含指定扩展名文件的目录?

解决方法:找到含指定扩展名文件的目录并复制到目标位置

这个需求其实很常见,你已经用find找到了包含.jpg文件的目录,接下来只需要解决去重和批量复制的问题就行,用rsync是最优选择(比cp更高效,还能完整保留文件属性),下面给你详细的实现方案:

基础版(适合无特殊字符的目录)

如果你的目录名里没有空格、引号这类特殊字符,可以用这个简单的命令:

find . -iname '*.jpg' -exec dirname {} \; | sort -u | xargs -I {} rsync -a {} /path/to/your/destination/

各部分作用:

  • find . -iname '*.jpg' -exec dirname {} \;:递归查找当前目录下所有.jpg文件(-iname不区分大小写),并提取每个文件所在的目录。
  • sort -u:对目录路径去重(因为同一个目录里可能有多个.jpg,find会重复输出该目录)。
  • xargs -I {} rsync -a {} /path/to/your/destination/:把每个去重后的目录作为参数,用rsync的归档模式(-a)复制到目标位置。-a会保留文件的权限、修改时间、所有者等属性,相当于做了完整备份。

进阶版(支持含空格/特殊字符的目录)

Mac系统里经常会遇到带空格的目录(比如My Vacation Photos),上面的命令会出错,这时候需要用null字符分隔路径来避免问题:

find . -iname '*.jpg' -print0 | xargs -0 dirname | sort -u | xargs -0 -I {} rsync -a {} /path/to/your/destination/

关键改进:

  • -print0:让find用null字符而不是换行符分隔结果,避免空格截断路径。
  • xargs -0:告诉xargs用null字符作为分隔符,正确识别带特殊字符的目录名。

保留原相对路径(可选)

如果你希望复制后保留原目录的层级结构(比如原目录是./2023/Summer/Photos,复制到目标后变成/destination/2023/Summer/Photos),可以加上rsync的--relative选项:

find . -iname '*.jpg' -print0 | xargs -0 dirname | sort -u | xargs -0 -I {} rsync -a --relative {} /path/to/your/destination/

先测试再执行(避免误操作)

在实际复制前,建议先把rsync换成echo,确认找到的目录是否正确:

find . -iname '*.jpg' -print0 | xargs -0 dirname | sort -u | xargs -0 -I {} echo {}

输出的目录列表符合预期后,再替换回rsync执行复制即可。

内容的提问来源于stack exchange,提问作者Dominik Novák

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:30:31