如何在bash命令行批量为process程序指定输入输出文件并添加输出文件名后缀
批量处理文件的Bash实现方案
基础方案:for 循环(无额外依赖,适配所有bash环境)
直接遍历目标文件,逐个调用process程序,自动跳过已经生成的处理后文件,兼容含空格、特殊字符的文件名:
for file in *; do # 仅处理普通文件,跳过目录和已处理完成的文件 [ -f "$file" ] && [[ ! "$file" =~ -processed$ ]] || continue process "$file" "${file}-processed" done
如果只需要处理特定后缀的文件,比如所有.log格式的文件,修改通配符即可:
# 仅处理后缀为.log的文件 for file in *.log; do [ -f "$file" ] || continue process "$file" "${file}-processed" done
调试技巧
正式执行前可以把命令中的process替换为echo process,先打印所有待执行的命令,确认文件名、路径完全符合预期后,再去掉echo实际运行,避免误操作。
进阶方案
递归处理子目录文件
如果需要处理当前目录及所有子目录下的目标文件,使用find命令实现:
find . -type f ! -name "*-processed" -exec process {} {}-processed \;
并行加速处理
文件数量较多时,可以使用parallel工具调用多核心并行处理,大幅提升效率:
parallel process {} {}-processed ::: *[!-processed]
内容的提问来源于stack exchange,提问作者evgu
相关产品推荐
相关产品推荐

