2012-09-12 3 views

ответ

1
set -- /dir/*.ini 
case $1 in 
    ('/dir/*.ini') echo "No ini files here.";; 
    (*)   echo "Found $# ini files: [email protected]";; 
esac 

Look ма! Нет вилки! Это должно бить на миллион циклов процессора любое решение с вилками до ls, find и друзьями.

Теперь здесь есть одна маленькая пропасть. Вы можете это заметить? Хорошо, что произойдет, если /dir содержит файл с именем *.ini буквально (звезда, точка, дюйм)? Вышеуказанное даст вам ложный отрицательный: он сообщает нет ini файл, хотя есть один. Если вы хотите, чтобы подготовиться к этому случаю (и вы должны, потому что вы внимательный программист, уделяя внимание к деталям, нет подводных камней в вашего кода, не так ли?), Вы немного не изменить первый случай читать

('/dir/*.ini') 
    if test -f '/dir/*.ini'; then 
    echo "Wow, there's a plain file named '/dir/*.ini'!" 
    else 
    echo "No ini files here." 
    fi;; 
0

find /dir/ -iname '*.ini'. Если вы хотите, чтобы не искать подкаталоги, добавьте -maxdepth 1 после /dir/

2

Я нашел это полезным для проверки существующих файлов jpeg.

if ls /path/*.jpg &> /dev/null; then 
    #do something with existing files 
else 
    echo "files do not exist" 
fi 
Смежные вопросы