GNU/Linux >> Linux の 問題 >  >> Linux

検索を使用するときに複数のコマンドを実行するにはどうすればよいですか?

このデモでは、 sh -c 'echo first; false' を使用します (または true ) 最初の -exec .これにより、出力が得られ、選択された終了コードの効果も得られます。次に echo second 2つ目に使用します。現在のディレクトリに 1 つのファイルがあるとします。

$ find . -type f -exec sh -c 'echo first; false' \; -exec echo second \;
first
$ find . -type f -exec sh -c 'echo first; true' \; -exec echo second \;
first
second
$ find . -type f \( -exec sh -c 'echo first; false' \; -false -o -exec echo second \; \)
first
second
$ find . -type f \( -exec sh -c 'echo first; false' \; -false -o -exec echo second \; \)
first
second

このタイプの実際のコマンドは次のようになります:

find . -type f \( -exec command1 \; -false -o -exec command2 \; \)

2 番目のセットでは、エスケープされた括弧が 2 つの -exec をグループ化します。 条項。 -false それらの間でテスト状態を「false」に強制し、-o 次の式 (2 番目の -exec ) -false のために評価される .

man find から :

<ブロック引用>

expr1 expr2
連続する 2 つの式は、暗黙の「and」で結合されていると見なされます。 expr1 が false の場合、expr2 は評価されません。

expr1 -a expr2
expr1 expr2 と同じ。

expr1 -o expr2
または; expr1 が true の場合、expr2 は評価されません。


エラーコード0が原因でcmd2の実行を防ぐことができるcmd1について問題にならない場合 :

find . -exec cmd1 \; -exec cmd2 \;

両方のコマンドを常に実行する唯一の確実な方法は、 find を使用することです コマンドを順番に実行するシェルを呼び出します:

find . -exec bash -c 'cmd1; cmd2' filedumper {} \;

cmd1 と cmd2 を実行するスクリプトを作成してもかまわない場合は、次のとおりです。

find . -exec myscript {} \;

または

find . -exec myscript {} +

使用する \;または + myscript が一度に複数のファイルを処理できるかどうかによって異なります (ファイル名にスペースが含まれている場合など)。

私の経験では、自分が行っていたことをスクリプトに入れることは、ほとんどの場合、それだけの価値がありました。一度やらなければならない場合は、もう一度やらなければなりません。

しかし、巧妙なトリックは、検索結果を 内側 に配置することです。 スクリプト:

if [ $# -gt 0 ]; then
    for each; do
        touch $each
    done
else
    find . -exec $0 {} +
fi

次に、myscript は、引数として指定したファイルに対して動作しますが、引数を指定しないと、現在のディレクトリから find を実行し、見つかったファイルに対して自分自身を呼び出します。これにより、 find -exec がスクリプトで定義したシェル関数を呼び出すことができないという事実を回避できます。


Linux
  1. Stdoutを複数のコマンドに送信する方法は?

  2. 検索を使用して複数のファイルの名前を変更するにはどうすればよいですか?

  3. Linux –シリアルポートを使用してプロセスを見つける方法は?

  1. ファイル内の複数の文字列を見つける方法は??

  2. シェルスクリプトを使用してgnuplotでコマンドを実行する方法は?

  3. Unix Sed チュートリアル:複数の Sed コマンドを実行する方法

  1. PHP-FPM を使用して PHP を実行するように Nginx を構成する方法

  2. sudo を使用して別のユーザーとして bash サブシェルで一連のコマンドを実行するにはどうすればよいですか?

  3. 複数の sudo および su コマンドを使用して元のユーザーを見つけるにはどうすればよいですか?