我正在尝试将两个命令(echo
和haml --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 --check
以stdout
.
答案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 {} +