У меня есть скрипт, и я хочу отображать разные сообщения, если файл существует или нет. У меня есть сценарий, как:
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
Тем не менее, если нет файлов, это показывает No such file or directory
вместо 0 файлов. В каталоге есть /import/
каталог, поэтому я не могу просто выполнить ls
команду, поскольку она всегда будет возвращать значение больше 0.
Как подсчитать количество файлов с определенным расширением (.zip, .gz и т. Д.) И использовать это значение в скрипте bash для отображения количества файлов, а затем использовать его в операторе if для отображения разных сообщений?
Попробуйте с этим:
Идея состоит в том, чтобы скрыть ошибку «нет такого файла», которая печатается в STDERR, отправляя ее в битовую корзину, и использовать соответствующую функцию теста для сравнения чисел. (
-gt
Означает «больше , чем». Там же-eq
,-lt
,-ge
и т.д.)источник
count=$(find /import -type f -name "*.zip" | wc -l)
ls /import/*.zip
если есть подкаталогиfind
вариантом.Я попробовал ваш сценарий и, как и следовало ожидать, когда никакие файлы не совпадают , что делает показать 0 файлов на выходе, но и показывает
ls
ошибку только раньше. Решить это довольно просто, не нужно угробитьls
. Просто замените первую строку на это:2>/dev/null
перенаправляет stderr на/dev/null
, подавляя сообщение об ошибке.источник