Ich habe ein Skript und möchte verschiedene Meldungen anzeigen, ob eine Datei vorhanden ist oder nicht. Ich habe ein Skript wie:
count=ls /import/*.zip | wc -l
echo "Number of files: " $count
if [ "$count" > "0" ]; then
echo "Import $count files"
else
echo "**** No files found ****"
fi
Wenn jedoch keine Dateien vorhanden sind, wird dies No such file or directory
anstelle von 0 Dateien angezeigt. Es gibt ein Verzeichnis im /import/
Verzeichnis, daher kann ich nicht einfach einen ls
Befehl ausführen, da dieser immer einen Wert größer als 0 zurückgibt.
Wie kann ich die Anzahl der Dateien einer bestimmten Erweiterung (.zip, .gz usw.) zählen und diesen Wert in einem Bash-Skript verwenden, um sowohl die Anzahl der Dateien anzuzeigen als auch ihn in einer if-Anweisung zum Anzeigen verschiedener Nachrichten zu verwenden?
Versuchen Sie es damit:
Die Idee ist, den Fehler "Keine solche Datei" zu verbergen, der an STDERR gedruckt wird, indem er an den Bitbucket gesendet wird, und die richtige Testfunktion zum Vergleichen von Zahlen zu verwenden. (
-gt
Steht für „größer als“. Es gibt auch-eq
,-lt
,-ge
, etc.)quelle
count=$(find /import -type f -name "*.zip" | wc -l)
ls /import/*.zip
wenn es Unterverzeichnisse gibtfind
Variante korrigiert .Ich habe versucht , das Skript und, wie erwartet, wenn keine Dateien abgestimmt sind es nicht zeigen 0 Dateien in der Ausgabe, sondern zeigt auch den
ls
Fehler kurz vor. Das zu lösen ist ganz einfach, es besteht kein Grund zum Grabenls
. Ersetzen Sie einfach die erste Zeile durch:2>/dev/null
leitet stderr an weiter/dev/null
und unterdrückt die Fehlermeldung.quelle