ファイル名を印刷し、検索結果ごとにコマンドを実行します。

ファイル名を印刷し、検索結果ごとにコマンドを実行します。

私に2つのコマンド(echoおよび)を適用しようとしています。haml --checkfind

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 

見つかった各ファイルに対してhamlを実行します。find

haml1回の呼び出しで複数のファイルを取得できる場合は省略可能-n 1

答え3

以下は、GNU固有の「-print0」および「xargs -0」トリックを使用せずにfindを使用して複数のコマンドを実行する移植可能で効率的な方法です。

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

関連情報