2番目の一致後にfindコマンドを停止するにはどうすればよいですか?

2番目の一致後にfindコマンドを停止するにはどうすればよいですか?

find最初の2つの一致のみを表示してから終了するコマンドを作成するにはどうすればよいですか?最初の一致後にfindコマンドをどのように停止できますか?録音されたバージョンは2つだけです。

答え1

リンクされた回答からに置き換えてください12

find . ... -print | head -n 2

この点に注意してくださいするファイル名は一般的なものとみなされます。つまり、改行文字は含まれていません。したがって、スクリプトソリューションには最適ではありません。 (望むより検索結果を繰り返すのはなぜ悪い習慣ですか?詳しくはこちらをご覧ください。 )はまだ高速でインタラクティブな使用のための最良の方法です。

さらに、ファイル数が多いシステムでは、プロセスがより多くのファイル名を書き込もうとした後にシャットダウンするとSIGPIPEを受け取るため、この-exec sh -c 'echo "$1"; echo "$2"' _ {} +方法よりも高速です。findheadfind

-exec結果が十分であれば、コマンドが2つ以上の結果を印刷できることは言うまでもありません。たとえば、find / -exec sh -c 'echo "$1"; echo "$2"' _ {} +長い間終了せず、各ARG_MAX結果で合計2つのファイルではなく2つのファイルが印刷されます。

答え2

find呼び出しで使用するsh

find . -type f -exec sh -c 'echo "$1" "$2"; done' _ {} +

+ターミネータが使用されたため、すべてのファイルが拡張され、見つかった最初-execと2番目のファイルである最初と2番目の引数だけがfind印刷されます。


または、次のようにして検索したファイルの数を指定できます。 (2つのファイルではなく100のファイルにすることもできます。その後、上記では100のファイルをすべて指定する必要があります!)出口コマンド(実際にはシェルはコマンドを送信exitし、find実行中のプロセスを終了させます)。

find -type f -exec sh -c '
    for file; do echo "$file"; c=$((c+1)); [ $c = 2 ] && exit; done' _ {} +

関連情報