Gibt es eine Möglichkeit, "Datei nicht gefunden" oder eine Nachricht anzuzeigen, wenn Sie den Befehl "find" verwenden?

1197
jimm-cl

Ich versuche, das Vorhandensein mehrerer Dateien zu überprüfen, ohne vorher zu wissen, wo sich die Dateien befinden. Also dachte ich findals das De-facto- Dienstprogramm, um dies zu tun ... Es funktioniert wie erwartet, aber das Problem ist, dass es das Nichtvorhandensein von Dateien nicht erkennt, das heißt, wenn eine Datei nicht unter dem durchsuchten Verzeichnis existiert Dann werden Sie, wie Sie erwarten werden, nicht in den Ergebnissen gezeigt.

Ich denke, das ist in Ordnung, da der findBefehl Dateien finden soll, die eigentlich überhaupt existieren (d'oh). Ich frage mich jedoch, ob es eine Möglichkeit für den findBefehl gibt, eine Nachricht wie "Datei nicht gefunden" oder ähnliches zurückzugeben, um zu informieren, dass die Datei nicht vorhanden ist, anstatt im Hintergrund zu versagen (oder erfolgreich zu sein).

Ich dachte, ich könnte das Problem möglicherweise umgehen, indem ich den findRückgabecode durch Abfragen verwende $?, aber selbst wenn die Datei nicht gefunden wird, ist der Rückgabewert der Fall 0.

Nur ein Beispiel von dem, was ich habe ...

find . -name foo.sh  find . -name bar.sh  

und was es zurückgibt, falls die einzige Datei darin ist foo.sh:

./directory/foo.sh 

Was ich gerne erhalten würde ist:

./directory/foo.sh bar.sh not found 

Kennt jemand eine findFlagge oder eine andere Problemumgehung, die ich verwenden kann?
Vielen Dank!

1

2 Antworten auf die Frage

2
user3631881

Ich glaube nicht, dass find die Option hat, zu sagen, " was Sie gesucht haben, wurde nicht gefunden ".

Sie können die Anzahl der von find zurückgegebenen Zeilen zählen und bei 0 die Meldung "not found" ausgeben. So etwas wie:

#/bin/bash  # put find output to a temp file find . -name 'foo.sh' > /var/tmp/find.tmp.$$  # count the number of lines COUNT=`wc -l /var/tmp/find.tmp.$$ | awk '{ print $1 }'`   if [ $COUNT -eq 0 ] then # find didn't return any results, so print message echo "foo.sh not found" else # find returned results, print them cat /var/tmp/find.tmp.$$ fi # remove temp file rm /var/tmp/find.tmp.$$ 

Das wird die Ausgabe des drucken find Befehl, ob es irgendwelche Ergebnisse waren oder ‚ foo.sh nicht gefunden ‘, wenn keine Ergebnisse.

Klingt nach einer guten Idee für den Fall, dass Sie einen Wrapper für `find` erstellen möchten, aber in diesem Fall wollte ich nur einen einfachen Einzeiler, nur um zu wissen, dass die Datei nicht vorhanden ist. +1 sowieso, denn wie gesagt, das ist eine gute Idee. Vielen Dank! jimm-cl vor 10 Jahren 0
0
user322483

Sie könnten versuchen find . -name foo | grep \/, den Exit-Code festzulegen.

grep sucht nach / in der Ausgabe und gibt den Exit-Code 1 zurück, wenn keiner gefunden wird

Genius! Ich kann verwenden: `find. -name foo | grep \ / || echo "Datei nicht gefunden" `. Vielen Dank! jimm-cl vor 10 Jahren 0