Saya memiliki skrip dan saya ingin menampilkan pesan yang berbeda jika ada file atau tidak. Saya punya skrip seperti:
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
Namun, jika tidak ada file, ini menunjukkan No such file or directory
bukan 0 file. Ada direktori di /import/
direktori, jadi saya tidak bisa hanya melakukan ls
perintah karena itu akan selalu mengembalikan nilai lebih besar dari 0.
Bagaimana saya bisa menghitung jumlah file dari ekstensi tertentu (.zip, .gz, dll.) Dan menggunakan nilai itu dalam skrip bash untuk menampilkan jumlah file dan kemudian menggunakannya dalam pernyataan if untuk menampilkan pesan yang berbeda?
Coba dengan ini:
Idenya adalah untuk menyembunyikan kesalahan "tidak ada file" yang dicetak ke STDERR dengan mengirimkannya ke bitbucket, dan menggunakan fungsi pengujian yang tepat untuk membandingkan angka. (
-gt
Singkatan dari "lebih besar dari". Ada juga-eq
,-lt
,-ge
, dll)sumber
count=$(find /import -type f -name "*.zip" | wc -l)
ls /import/*.zip
jika ada subdirektorifind
varian.Saya mencoba skrip Anda dan, seperti yang diharapkan, ketika tidak ada file yang cocok itu memang menampilkan 0 file dalam output, tetapi juga menunjukkan
ls
kesalahan sebelumnya. Memecahkan ini cukup mudah, tidak perlu paritls
. Cukup ganti baris pertama dengan ini:2>/dev/null
mengarahkan ulang stderr ke/dev/null
, menekan pesan kesalahan.sumber