Я изменяю сценарий bash, и мне нужно написать цикл и проверить, существует ли файл определенного шаблона в исходном каталоге.

Скрипт работает, если я назначаю определенный файл, но не подстановочным знаком (например, file_patt* ). Есть идеи?

while [[ ! -e $SRC_DIR/file_patt* ]] ; do 
    echo "in loop"
done

1 ответ1

0

Я думаю, что могу решить вашу проблему довольно простым способом.

Я не хочу использовать не встроенные функции:

unset i
rm *.txtx
# Now it is sure no matching file is in this dir
while a=(*.txtx) [ ! -e "$a" ]; do
   echo loop $i; 
   [ $((++i)) -eq 5 ] && >a.txtx # Creates a matching file if i == 5
done
ls *.txtx

Выход:

loop
loop 1
loop 2
loop 3
loop 4
loop 5
a.txtx

Недостаточно проверить размер массива, так как если нет файла, соответствующего шаблону, то размер массива будет равен 1, содержащему шаблон *.txtx . Но может существовать файл с именем *.txtx , поэтому необходимо использовать -e , чтобы проверить, является ли результат просто шаблоном или реальным файлом.

Если в цикле создано больше подходящих файлов, оно все равно работает, так как $a совпадает с ${a[0]} .

Надеюсь, это поможет!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .