Mat*_*iko 16 command-line shell bash recursive wildcards
这是非常基本的,我有一个文件夹,其中包含几个 JS 文件的子文件夹,我想对这些文件夹中的所有文件运行 Google 的 Clojure 编译器。处理单个文件的命令如下:
java -jar compiler.jar --js filename.js --js_output_file newfilename.js
Run Code Online (Sandbox Code Playgroud)
如何修改它以在我的目录结构中的每个 JS 文件上运行?
Ant*_*hon 16
您可以使用find
:
find . -name "*.js" -exec java -jar compiler.jar --js {} --js_output_file new{} \;
Run Code Online (Sandbox Code Playgroud)
use*_*ser 10
您还可以使用简单for
循环,尤其是当文件位于单个目录(无子目录)中时。也可以修改它以使用子目录。
没有递归:
for filename in ./*.js
do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done
Run Code Online (Sandbox Code Playgroud)
或作为等效的单线:
for filename in ./*.js; do java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"; done
Run Code Online (Sandbox Code Playgroud)
递归到子目录(需要 GNU bash 4.0 或更新版本)(感谢@ChrisDown):
shopt -s globstar
for filename in ./**/*.js; do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done
Run Code Online (Sandbox Code Playgroud)