GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie stoppe ich den Find-Befehl nach dem ersten Match?

Gibt es eine Möglichkeit, das find zu erzwingen Befehl zum Stoppen direkt nach dem Finden der ersten Übereinstimmung?

Akzeptierte Antwort:

Mit GNU oder FreeBSD find , können Sie das -quit verwenden Prädikat:

find . ... -print -quit

Das NetBSD find Äquivalent:

find . ... -print -exit

Wenn Sie nur den Namen drucken und davon ausgehen, dass die Dateinamen keine Zeilenumbruchzeichen enthalten, könnten Sie Folgendes tun:

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

Das wird find nicht stoppen nach dem ersten Match, aber möglicherweise, je nach Timing und Pufferung beim zweiten Match oder (viel) später. Grundsätzlich find wird mit einem SIGPIPE beendet, wenn es versucht, etwas auszugeben, während head ist bereits weg, weil es bereits die erste Zeile der Eingabe gelesen und angezeigt hat.

Beachten Sie, dass nicht alle Shells auf diesen find warten Befehl nach head ist zurückgekommen. Die Bourne-Shell und AT&T-Implementierungen von ksh (wenn nicht interaktiv) und yash (nur wenn diese Pipeline der letzte Befehl in einem Skript ist) nicht, sodass sie im Hintergrund ausgeführt wird. Wenn Sie dieses Verhalten lieber in einer beliebigen Shell sehen möchten, können Sie das Obige jederzeit ändern in:

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

Wenn Sie mehr tun, als nur die Pfade der gefundenen Dateien zu drucken, können Sie diesen Ansatz ausprobieren:

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

(ersetze printf was auch immer Sie mit dieser Datei tun würden).

Das hat den Nebeneffekt von find Rückgabe eines Exit-Status, der die Tatsache widerspiegelt, dass es jedoch getötet wurde.

Tatsächlich wird das SIGPIPE-Signal anstelle von SIGTERM verwendet (kill -s PIPE statt kill ) wird dazu führen, dass einige Shells über diesen Tod schweigen (aber würden immer noch einen Exit-Status ungleich Null zurückgeben).


Linux
  1. Wie verwende ich den basename-Befehl?

  2. Wie wird der Platzhalter * als Befehl interpretiert?

  3. Wie zähle ich die Anzahl der Zeilen in einer Datei nach einem Grep-Match?

  4. So führen Sie Find Command Invert Match in Solaris aus

  5. So finden Sie die Anzahl der Kerne in Ubuntu

So finden Sie Dateien in Linux mit dem Find-Befehl

Suchen von Dateien in der Befehlszeile (How To)

So prüfen Sie Berechtigungen mit dem Befehl find

So finden Sie Dateien in der Ubuntu-Befehlszeile

So finden Sie Dateien mit dem fd-Befehl in Linux

Wie finde ich die platzraubendsten Verzeichnisse oder Dateien heraus?