Mam skrypt i chcę wyświetlać różne komunikaty, jeśli plik istnieje, czy nie. Mam skrypt taki jak:
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
Jeśli jednak nie istnieją żadne pliki, wyświetla się No such file or directory
zamiast 0 plików. W katalogu znajduje się /import/
katalog, więc nie mogę po prostu wykonać ls
polecenia, ponieważ zawsze zwróci ono wartość większą niż 0.
Jak mogę policzyć liczbę plików o określonym rozszerzeniu (.zip, .gz itp.) I użyć tej wartości w skrypcie bash do wyświetlenia liczby plików, a następnie użyć jej w instrukcji if do wyświetlenia różnych komunikatów?
Spróbuj tego:
Chodzi o to, aby ukryć błąd „brak takiego pliku”, który jest drukowany do STDERR, wysyłając go do bitbucket, i użyć odpowiedniej funkcji testowej do porównywania liczb. (
-gt
Skrót od „większy niż”. Tam też-eq
,-lt
,-ge
, itd.)źródło
count=$(find /import -type f -name "*.zip" | wc -l)
ls /import/*.zip
jeśli istnieją podkatalogifind
wariancie.Próbowałem skrypt i, zgodnie z oczekiwaniami, gdy żadne pliki nie są dopasowane, że nie pokazują 0 pliki na wyjściu, ale pokazuje również
ls
błąd tuż przed. Rozwiązanie tego jest dość łatwe, nie ma potrzeby rwanials
. Wystarczy zastąpić pierwszy wiersz tym:2>/dev/null
przekierowuje stderr do/dev/null
, pomijając komunikat o błędzie.źródło