打印文件名并对 find 的每个结果执行命令

打印文件名并对 find 的每个结果执行命令

我正在尝试将两个命令(echohaml --check)应用于我的find.

haml --check `find . -name "*.haml"`
# return Syntax error on line 2: Illegal nesting: nesting within plain text is illegal.
# but I don't know which file

echo `find . -name "*.haml"`
# returns list of files (space separated) 

理想情况下,我想打印文件名,然后haml --checkstdout.

答案1

还有一种没有 xargs 的方法:

find . -name "*.haml" -ls -exec haml --check {} \;

仅打印带路径的文件名:

find . -name "*.haml" -print -exec haml --check {} \;

答案2

find . -name "*.haml" -print0 | xargs -0 -n 1 --no-run-if-empty haml --check 

对找到的每个文件运行 hamlfind

如果haml可以在一次调用中获取多个文件,则可以省略-n 1

答案3

这是一种可移植且有效的方法,可以使用 find 执行多个命令,而无需使用 GNU 特定的“-print0”和“xargs -0”技巧:

find . -name "*.haml" -exec sh -c 'for i; do echo $i;ls -l $i;haml --check $i; done' sh {} +

相关内容