Angenommen, *.txt
in einem Verzeichnis befinden sich möglicherweise Hunderte von Dateien. Ich möchte nur die ersten drei *.txt
Dateien finden und dann den Suchvorgang beenden.
Wie erreichen Sie dies mit dem find
Dienstprogramm? Ich hatte eine kurze Durchsicht auf seiner Manpage, schien keine solche Option zu sein.
find . -name '*.txt' -print -quit
nur die erste Übereinstimmung anzeigen undfind
nach der ersten Übereinstimmung beenden. Ich weiß nicht, ob es möglich ist, sich an den Fall "Ausfahrt nach n Übereinstimmungen" anzupassen.Antworten:
Sie könnten die Ausgabe von
find
durch leitenhead
:quelle
head
startet und wartet auf Eingabe von der linken Seite der Leitung. Dannfind
startet und sucht nach Dateien, die den Kriterien entsprechen, dessen Ausgang durch die Leitung zu senden. Wennhead
die Anzahl der angeforderten Zeilen empfangen und gedruckt wurde, wird die Pipe geschlossen.find
bemerkt das geschlossene Rohr und es endet auch. Einfach, elegant und effizient.-n 3
ist POSIX-kompatibel und daher wahrscheinlich portabler.Diese andere Antwort ist etwas mangelhaft. Der Befehl lautet
Dann gibt es eine Erklärung in einem der Kommentare :
Das ist fast wahr.
Das Problem ist
find
, dass die geschlossene Pipe nur beim Versuch, darauf zu schreiben, bemerkt wird. In diesem Fall wird die 4. Übereinstimmung gefunden. Aber wenn es kein viertes Match gibt,find
geht es weiter. Deine Muschel wird warten! Wenn dies in einem Skript geschieht, wartet das Skript, obwohl wir bereits wissen, dass die Pipe-Ausgabe endgültig ist und nichts hinzugefügt werden kann. Nicht so effizient.Der Effekt ist vernachlässigbar, wenn dieser
find
Vorgang von selbst schnell abgeschlossen wird. Bei einer komplexen Suche in einem großen Dateibaum kann der Befehl jedoch unnötig verzögern, was auch immer Sie als Nächstes tun möchten.Die nicht ganz perfekte Lösung ist das Laufen
Auf diese Weise
head
wird die Shell beim Beenden sofort fortgesetzt. Der Hintergrundprozessfind
kann dann ignoriert werden (er wird früher oder später beendet) oder mitpkill
oder etwas gezielt ausgeführt werden .Um das Konzept zu beweisen, können Sie suchen
/
. Wir erwarten nur ein Spiel,find
suchen es aber überall und es kann viel Zeit in Anspruch nehmen.Beenden Sie es mit Ctrl+ C, sobald Sie das Problem sehen. Jetzt vergleiche:
quelle