find
最初の2つの一致のみを表示してから終了するコマンドを作成するにはどうすればよいですか?最初の一致後にfindコマンドをどのように停止できますか?録音されたバージョンは2つだけです。
答え1
リンクされた回答からに置き換えてください1
。2
find . ... -print | head -n 2
この点に注意してくださいするファイル名は一般的なものとみなされます。つまり、改行文字は含まれていません。したがって、スクリプトソリューションには最適ではありません。 (望むより検索結果を繰り返すのはなぜ悪い習慣ですか?詳しくはこちらをご覧ください。 )はまだ高速でインタラクティブな使用のための最良の方法です。
さらに、ファイル数が多いシステムでは、プロセスがより多くのファイル名を書き込もうとした後にシャットダウンするとSIGPIPEを受け取るため、この-exec sh -c 'echo "$1"; echo "$2"' _ {} +
方法よりも高速です。find
head
find
-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' _ {} +