Selbst wenn /tmp
keine Datei aufgerufen wurde something
, gibt die Suche mit find
0 zurück:
$ find /tmp -name something
$ echo $?
0
Wie kann ich einen Exit-Status ungleich Null erhalten, wenn find
nichts gefunden wird?
Hier ist ein Einzeiler, von dem ich glaube, dass er macht, was Sie wollen:
find /tmp -name something | egrep '.*'
Der Rückgabestatus ist, 0
wenn etwas gefunden wurde, andernfalls nicht Null.
Wenn Sie auch die Ausgabe von find
für die weitere Verarbeitung erfassen müssen , hat die Antwort von Sven dies abgedeckt.
*
auf demegrep
Regex ist vollständig überflüssig. Da Sie keineegrep
Syntax für reguläre Ausdrücke verwenden, ist plain oldgrep
möglicherweise einige Mikrosekunden schneller.find ... | read
Einfachste Lösung, die nicht druckt, aber 0 verlässt, wenn Ergebnisse gefunden werden
quelle
Exit 0 ist mit find einfach, Exit> 0 ist schwieriger, weil das normalerweise nur mit einem Fehler passiert. Wie auch immer, wir können es schaffen:
quelle
find
scheint nicht von den Exit-Codes der von ihm ausgeführten-exec
s abzuhängen .exec
Abschnitt ausgeblendet , nicht unter Rückgabewert). Es kann nicht zwischen nichts, was gefunden wurde, und sich selbst als fehlerhaft herausstellen (z. B. wenn es an einem nicht existierenden Ausgangspunkt aufgerufen wurde).Nachdem ich diese Frage gerade gefunden habe, als ich versucht habe, ein Problem mit Puppet zu lösen (Berechtigungen für Ordner in einem Verzeichnis ändern, aber nicht für das Verzeichnis selbst), scheint dies zu funktionieren:
Mein spezieller Anwendungsfall ist dieser:
Womit Code 1 beendet wird, wenn der Befehl find keine Dateien mit den erforderlichen Berechtigungen findet.
quelle
Es ist nicht möglich. Find gibt 0 zurück, wenn es erfolgreich beendet wurde, auch wenn es keine Datei gefunden hat (was ein korrektes Ergebnis ist und keinen Fehler anzeigt, wenn die Datei tatsächlich nicht existiert).
Zitiert die Suchmanpage
Je nachdem, was Sie erreichen möchten, können Sie versuchen,
-print
den Dateinamen zu ermitteln und anhand der Ausgabe zu testen:quelle
exec
/ dokumentiertexecdir
(verwendet mit+
):If any invocation returns a non-zero value as exit status, then find returns a non-zero exit status.
Ich halte dies für die prägnanteste und direkteste Methode:
quelle
-print -quit
, was Ihr Anliegen ansprechen könnte.Hier ist ein kleines Skript, das ich angerufen habe
test.py
. Es verbessert andere Methoden dahingehend, dass es einen Fehlercode zurückgibt, wenn einer festgelegt ist, und zusätzlich einen, wenn find keine Dateien auflistet:Hier ist die Befehlszeilenausgabe:
Für ein Ergebnis, bei dem find Fehler hatte, aber Dateien gefunden hat:
Dann, wenn Sie die Liste der Dateien möchten , können Sie Gebrauch machen
-print 0
weitergegebenfind
und spalten das aus Variable auf NULL - Werten, oder Sie können nur eine print - Anweisung für hinzufügen.quelle
Es ist nicht nur so,
find
dass die Exit-Statuscodes bei Erfolg als Null zurückgegeben werden. In Unix gibt der Befehl, den Sie ausführen, bei Erfolg den Exit-Status als Null zurück.quelle