【发布时间】:2016-09-23 19:16:51
【问题描述】:
我想知道是否有一个用于批处理一个文件夹中的一组文件并将结果重定向到另一个文件夹的单行程序。 我尝试过这样的事情:
find input_dir/ -name "PATTERN" | xargs -I {} sed 's:foo:bar:g' > output_dir/{}
例如,input_dir/ 有文件 A、B、C,我希望的结果是在 output_dir/ 中处理了文件 A、B、C,文件名相同。
我希望使用 {} 来替换文件名并构建输出文件路径,但这不起作用。
有人知道如何解决这个问题吗?或者其他更好的方法? 谢谢!
【问题讨论】:
-
您的意思是您想要将更改的文件名列表输出到文件吗? “重定向结果”不清楚。
-
OP 已更新.. 基本上我想要一个文件列表在 output_dir/ 中具有相同的文件名,但它们由 'sed' 处理
-
但只是一个列表,而不是实际文件,对吗?
-
不太确定您的问题...输入 = n 个文件,输出 = n 个文件,一对一映射。
-
Shell 会逐渐减少对
find的需求;如果不需要,请不要使用它。由于bash4.0,你可以写shopt -s globstar; for f in input_dir/**/PATTERN; do sed 's:foo:bar:g' "$f" > output_dir/"${f#input_dir/}"; done。