Я пишу сценарий, где мне нужно перечислять файлы, не отображая их. В приведенном ниже сценарии перечислены файлы во время выполнения, которые я не хочу делать. Просто хочу проверить, есть ли файлы в каталоге, а затем выполнить «execute case 2». ls -lrt /a/b/c/
if [ $? != 0 ]
then
echo "executing case 2"
else
echo "
дата +% D «% T No files found to process" >> $LOG
Список файлов из каталога без отображения их
0
A
ответ
0
Тестирование код возврата ls
не будет делать вам много хорошего, потому что он будет возвращать ноль в обоих случаях где он может перечислить каталог.
Вы можете сделать это с помощью grep
.
.: например
ls | grep .
echo $?
Это будет 'истина', если Grep соответствует ничего (файлы присутствуют). И ложь, если нет.
Таким образом, в вашем примере:
ls | grep .
if [ $? -eq 0 ]
then
echo "Directory has contents"
else
echo "directory is empty"
fi
Хотя быть осторожным с делать такого рода вещи - это выглядит как будто вы находитесь в опасности теста занятости-ожидания, что может сделать сисадмины несчастным.
0
Если вам не нужно, чтобы увидеть результат Ls, вы можете просто сделать это условие:
[ "$(ls -lrt a/b/c)" ] && echo "Not Empty" || echo "Empty"
Или еще
[ "$(ls -A a/b/c)" ] && echo "Not Empty" || echo "Empty"
лучше Поскольку вы не заботитесь о длинном выходе (l) или порядке отображения (rt).
В скрипте, можно использовать это в если заявление:
#!/bin/sh
if [ "$(ls -A a/b/c)" ]; then
echo "Not empty"
else
echo "Empty"
fi
Что вы спрашиваете? «Просто хочу проверить, есть ли файлы в каталоге», звучит так: http://stackoverflow.com/questions/5884885/how-to-specify-if-directory-not-empty-in-a-ash-shell-script но ваш скрипт выглядит так, как будто вы проверяете, существует ли каталог, а не пуст (в этом случае: http://stackoverflow.com/questions/59838/check-if-a-directory-exists-in-a-shell-script) – yankee