Подтвердить что ты не робот

Bash скрипты, прокрутка файлов в папке не выполняется

Я просматриваю определенные файлы (все файлы, начинающиеся с MOVIE) в папке с этим bash script кодом:

for i in MY-FOLDER/MOVIE*
do

который отлично работает при наличии файлов в папке. Но когда их нет, это как-то происходит с одним файлом, который, по его мнению, называется MY-FOLDER/MOVIE *.

Как я могу избежать этого, чтобы ввести вещи после

do

если в папке нет файлов?

4b9b3361

Ответ 1

for i in $(find MY-FOLDER/MOVIE -type f); do
  echo $i
done

Утилита find является одним из швейцарских армейских ножей linux. Он начинается в указанном вами каталоге и находит все файлы во всех подкаталогах в соответствии с указанными вами параметрами.

-type f найдет только обычные файлы (не каталоги).

Как я уже писал, команда также найдет файлы в подкаталогах; Вы можете предотвратить это, добавив -maxdepth 1


Редактировать, 8 лет спустя (спасибо за комментарий, @tadman!)

Вы можете полностью избежать цикла с помощью

find . -type f -exec echo "{}" \;

Это говорит find, чтобы он вызывал echo для каждого файла, заменяя его имя на {}. Экранированная точка с запятой необходима для завершения команды, переданной -exec.

Ответ 2

С опцией nullglob.

$ shopt -s nullglob
$ for i in zzz* ; do echo "$i" ; done
$ 

Ответ 3

for file in MY-FOLDER/MOVIE*
do
  # Skip if not a file
  test -f "$file" || continue
  # Now you know it a file.
  ...
done