使い方を教えてくださいパイプのexecパラメータは、findコマンド?
質問
私の構築に努めぐコマンドを処理し、バンチのディレクトリにあるファイルを用いた異なる実行可能ファイル.残念ながら、 -exec
に示することを認めていません用のパイプでも \|
ためのシェルの解釈する文字です。
ここでは、具体的には、どのような思いをしない作品で、パイプ端のコマンド):
find /path/to/jpgs -type f -exec jhead -v {} | grep 123 \; -print
解決
してみてください
find /path/to/jpgs -type f -exec sh -c 'jhead -v {} | grep 123' \; -print
すこともできない埋め込みおexec算書の中にshスクリプトしない:
find -exec some_script {} \;
他のヒント
少し異なるアプローチが使用xargs:
find /path/to/jpgs -type f -print0 | xargs -0 jhead -v | grep 123
私が常に見つかり少しわかりやすさ"に対応(-print0と-0の引数に臨機応変な対応が必要ファイル名を含むブランクス)
この が (試験は行っておりません)をより有効利用-execおりますのでパイプのファイルの一覧をxargs、xargsさjheadコマンドラインは取得しません。
と -exec
できるだけ実行シングル実行可能な一部の引数を、任意のシェルコマンド.これを避けるため、利用できる sh -c '<shell command>'
.
なお、利用 -exec
は非常に効率が悪い。各ファイルが見つかると、コマンドを実行されます。この効率的な場合はさせないように指定できます。(例えば、移動して grep
外の -exec
または配管の結果 find
へ xargs
このように Palmin.)
を使用 find
コマンドをこのタイプのタスクではないかも最高。私は以下のコマンドを使用頻繁に見つのファイルが含まれる要求された情報:
for i in dist/*.jar; do echo ">> $i"; jar -tf "$i" | grep BeanException; done
この出力一覧いません:
find /path/to/jpgs -type f -exec jhead -v {} \; | grep 123
または
find /path/to/jpgs -type f -print -exec jhead -v {} \; | grep 123
おgrepの結果を示-exec.
あのような他の方法でもかゲットー.
のシェルのオプションextquoteいうことを見execものの、そのパイプで頂ければ検討させて頂きます。.
root@ifrit findtest # find -type f -exec echo ls $"|" cat \;|sh
filename
root@ifrit findtest # find -type f -exec echo ls $"|" cat $"|" xargs cat\;|sh
h
うにゃんを追加で以上の可視化までのOPの問題の管内exec.