2015-01-28 3 views
0

Я пишу сценарий, где мне нужно перечислять файлы, не отображая их. В приведенном ниже сценарии перечислены файлы во время выполнения, которые я не хочу делать. Просто хочу проверить, есть ли файлы в каталоге, а затем выполнить «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

Что вы спрашиваете? «Просто хочу проверить, есть ли файлы в каталоге», звучит так: 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

ответ

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