使い方を教えてくださいパイプのexecパラメータは、findコマンド?

StackOverflow https://stackoverflow.com/questions/62044

  •  09-06-2019
  •  | 
  •  

質問

私の構築に努めぐコマンドを処理し、バンチのディレクトリにあるファイルを用いた異なる実行可能ファイル.残念ながら、 -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 または配管の結果 findxargs このように 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.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top