如何根据扩展名将父目录文件递归移动到对应submissionDocumentation子目录
操作方案
前置检查
操作前建议先执行测试命令,确认待移动的文件路径符合预期,避免误操作。
方法一:通用find命令方案(适配任意数量符合结构的目录)
测试命令(仅打印待移动文件,不执行移动)
find . -type f \( -name "*.csv" -o -name "*.jpg" \) -not -path "*/submissionDocumentation/*" -print
确认输出的文件都是你需要移动的目标文件后,执行正式移动命令:
正式移动命令
find . -type f \( -name "*.csv" -o -name "*.jpg" \) -not -path "*/submissionDocumentation/*" -exec sh -c 'mv "$0" "$(dirname "$0")/submissionDocumentation/"' {} \;
命令逻辑:自动识别所有不在submissionDocumentation目录下的csv、jpg文件,将其移动到所属父目录下的submissionDocumentation子目录中,无需手动指定目录名,适配139个批量目录的场景。
方法二:目录名有规律时的循环方案
如果所有父目录命名均符合xxx_03_xxx的格式,可以用更简单的循环实现:
测试命令(仅打印待移动路径)
for dir in xxx_03_*/; do echo ${dir}*.csv ${dir}*.jpg; done
确认路径无误后执行移动:
正式移动命令
for dir in xxx_03_*/; do mv ${dir}*.csv ${dir}*.jpg ${dir}submissionDocumentation/; done
注意事项
- 若担心误操作,可先对全量目录做备份后再执行移动
- 命令兼容GNU/Linux、macOS主流shell环境,无需额外安装依赖
内容的提问来源于stack exchange,提问作者warde
相关产品推荐
相关产品推荐

