![如何对多个文件运行命令](https://linux22.com/image/33424/%E5%A6%82%E4%BD%95%E5%AF%B9%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
这是非常基本的,我有一个包含几个 JS 文件子文件夹的文件夹,我想对这些文件夹中的所有文件运行 Google 的 Clojure 编译器。处理单个文件的命令如下:
java -jar compiler.jar --js filename.js --js_output_file newfilename.js
如何修改它以在目录结构中的每个 JS 文件上运行?
答案1
您可以使用find
:
find . -name "*.js" -exec java -jar compiler.jar --js {} --js_output_file new{} \;
答案2
您还可以使用简单的for
循环,特别是当文件位于单个目录(无子目录)中时。它也可以修改为与子目录一起使用。
没有递归:
for filename in ./*.js
do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done
或作为等效的一句台词:
for filename in ./*.js; do java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"; done
递归到子目录(需要 GNU bash 4.0 或更高版本)(谢谢@克里斯唐):
shopt -s globstar
for filename in ./**/*.js; do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done