while циклічні умови - пошук рядкового шаблону в bash


0

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

Сценарій працює, якщо я позначаю конкретний файл, але не з підказкою ( file_patt*наприклад,). Будь-які ідеї?

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

Це те, що ви намагаєтесь зробити? stackoverflow.com/questions/6363441/… Один з відповідей може бути корисним
Val

Ви ніколи не отримаєте розширення файлів всередині [[ ... ]]: ви повинні використовувати окремі дужки. Інші коментарі у посиланні на @ Вал пояснюють, що потрібно, і рішення Маріан є найменшим.
АФХ

2
Я думаю, що щось на зразок inotifywaitє кращим рішенням
glenn jackman

@glennjackman класно!

Відповіді:


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]}.

Я сподіваюся, що це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.