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

MacBook Pro下用Bash命令迁移指定后缀文件并保留目录结构

嘿,针对你在MacBook Pro上用Bash迁移.json文件的需求,我给你两个实用方案,都是经过验证的靠谱操作~

方案1:用rsync(推荐,简洁高效)

rsync是处理文件同步/迁移的神器,这条命令完全符合你的需求,而且操作起来特别省心:

rsync -av --include='*/' --include='*.json' --exclude='*' /dir1/ /dir2/

参数说明:

  • -a:归档模式,会保留文件的权限、时间戳等属性,同时自动递归处理所有子目录
  • -v:verbose模式,会显示每一步的操作细节,方便你确认进度和排查问题
  • --include='*/':先包含所有子目录结构,这样rsync才能遍历到深层文件夹里的.json文件
  • --include='*.json':明确指定要包含所有后缀为.json的文件
  • --exclude='*':排除所有其他类型的文件和目录,确保只有.json文件被处理
  • /dir1/:注意路径末尾的斜杠,代表同步/dir1内部的内容,而不是把/dir1目录本身搬到/dir2
  • /dir2/:目标目录,rsync会自动创建不存在的子目录,完全保留原有的目录结构

这个命令的效果:只会把/dir1里的所有.json文件迁移到/dir2对应的路径下,/dir2中原有的文件会被完整保留,非.json文件完全不会被触碰。

方案2:用find + mv(手动控制更精细)

如果你想要更精细的手动控制,比如随时调整逻辑,可以用find配合mv来实现:

find /dir1 -type f -name "*.json" | while read -r file; do
    # 将源文件路径中的/dir1替换为/dir2,得到目标文件路径
    target_file="${file//\/dir1\//\/dir2\/}"
    # 创建目标文件所在的目录(如果不存在则递归创建)
    mkdir -p "$(dirname "$target_file")"
    # 移动文件,-n参数确保不覆盖目标目录已存在的同名.json文件
    mv -n "$file" "$target_file"
done

关键步骤解释:

  • find /dir1 -type f -name "*.json":遍历/dir1下所有后缀为.json的普通文件(排除目录)
  • while read -r file:逐个读取找到的文件路径,避免文件名含空格等特殊字符出问题
  • target_file="${file//\/dir1\//\/dir2\/}":通过字符串替换,把源路径里的/dir1替换成/dir2,自动生成对应的目标路径
  • mkdir -p "$(dirname "$target_file")":-p参数会自动创建所有不存在的父目录,比如/dir2/a/b/c如果不存在,会一次性创建完整路径
  • mv -n "$file" "$target_file":-n参数是核心,它会跳过已经存在的目标文件,确保/dir2里原有的文件不会被覆盖

小提示:

  • 建议先做测试:比如给rsync加--dry-run参数(rsync -av --dry-run ...),或者把mv换成echo mv,先看看输出的操作是否符合预期,避免误操作
  • 权限问题:确保你对/dir1有读取权限,对/dir2有写入权限,否则会报错

内容的提问来源于stack exchange,提问作者Javiss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:16:45