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
为了保护自己免受文件名开头的影响,通常是一个好主意-
(在这种情况下,我不知道这是否有必要,但是无论如何都是一个好习惯)。