Answers:
您可以使用find:
find . -name "*.js" -exec java -jar compiler.jar --js {} --js_output_file new{} \;
mv并将文件写入原始名称。
find -name '*.js' | while read jsfile; do java -jar compiler.jar --js "$jsfile" --js_output_file "new$jsfile" && mv "new$jsfile" "$jsfile"; done则可以解决问题。
find -exec非常适合简单的命令。对于复杂的find | xargs命令要好得多,并且还允许并行运行命令。
xargs更好?
您还可以使用一个简单的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或更高版本)(感谢@ChrisDown):
shopt -s globstar
for filename in ./**/*.js; do
java -jar compiler.jar --js "${filename}" --js_output_file "new${filename}"
done
globstar它。
for f in ./*.js; do或for f in ./**/*.js; do为了保护自己免受文件名开头的影响,通常是一个好主意-(在这种情况下,我不知道这是否有必要,但是无论如何都是一个好习惯)。