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

最初の一致後に検索コマンドを停止する方法は?

findを強制する方法はありますか 最初の一致を見つけた直後に停止するコマンド?

承認された回答:

GNUまたはFreeBSDのfind-quitを使用できます 述語:

find . ... -print -quit

NetBSDのfind 同等:

find . ... -print -exit

名前を印刷するだけで、ファイル名に改行文字が含まれていないと仮定すると、次のことができます。

find . ... -print | head -n 1

findは停止しません 最初の試合の後、しかしおそらく、2番目の試合時または(ずっと)後のタイミングとバッファリングに依存します。基本的に、find head中に何かを出力しようとすると、SIGPIPEで終了します。 入力の最初の行をすでに読み取って表示しているため、すでに表示されていません。

すべてのシェルがそのfindを待機するわけではないことに注意してください headの後のコマンド 帰りました。 kshのBourneシェルとAT&Tの実装 (非対話型の場合)およびyash (そのパイプラインがスクリプトの最後のコマンドである場合のみ)そうではなく、バックグラウンドで実行されたままになります。いずれかのシェルでその動作を確認したい場合は、いつでも上記を次のように変更できます。

(find . ... -print &) | head -n 1

見つかったファイルのパスを印刷する以上のことをしている場合は、次の方法を試すことができます。

find . ... -exec sh -c 'printf "%sn" "$1"; kill "$PPID"' sh {} ;

printfを置き換えます そのファイルで何をするにしても)

これには、findの副作用があります ただし、強制終了されたという事実を反映して終了ステータスを返します。

実際には、SIGTERMの代わりにSIGPIPEシグナルを使用しています(kill -s PIPE killの代わりに )一部のシェルはその死についてより沈黙します(ただし、ゼロ以外の終了ステータスを返します)。


Linux
  1. basenameコマンドの使用方法は?

  2. ワイルドカード*はコマンドとしてどのように解釈されますか?

  3. Solaris で検索コマンドの反転一致を実行する方法

  1. Ubuntu でコア数を調べる方法

  2. find でディレクトリを除外する方法。指図

  3. 「tar」コマンドと「find」コマンドを組み合わせる方法

  1. コマンドラインでのファイルの検索(ハウツー)

  2. grepさ​​れた行の後にn行目を取得する方法は?

  3. ifconfig コマンドから最初の IP アドレスをキャプチャする方法は?