Я пытаюсь перебрать файлы из списка указанных расширений с помощью скрипта bash. Я попробовал решение, указанное в Matching files with various extensions using for loop, но оно не работает должным образом. Приведенное решение было:Зацикливание файлов с указанными расширениями в bash
for file in "${arg}"/*.{txt,h,py}; do
Вот моя версия этого:
for f in "${arg}"/*.{epub,mobi,chm,rtf,lit,djvu}
do
echo "$f"
done
Когда я запускаю это в директории с epub
файла в нем, я получаю:
/*.epub
/*.mobi
/*.chm
/*.rtf
/*.lit
/*.djvu
Поэтому я попытался изменить заявление for
:
for f in "${arg}"*.{epub,mobi,chm,rtf,lit,djvu}
Тогда я получил:
089281098X.epub
*.mobi
*.chm
*.rtf
*.lit
*.djvu
Я также получить тот же результат с:
for f in *.{epub,mobi,chm,rtf,lit,djvu}
Таким образом, кажется, что "${arg}"
аргумент не нужен.
Хотя любое из этих утверждений находит файлы указанных расширений и может передать их программе, я получаю ошибки чтения из неразрешенных имен файлов *.
.
Я запускаю это на OS X Mountain Lion
. Я знал, что оболочка bash по умолчанию устарела, поэтому я обновил ее с 3.2.48
до 4.2.45
, используя homebrew
, чтобы узнать, была ли эта проблема. Это не помогло, поэтому мне интересно, почему я получаю эти неожиданные результаты. Является ли данное решение неправильным или представляет собой оболочку bash OS X
, как-то отличную от версии *NIX
? Возможно ли альтернативный способ выполнить то же самое, что может работать лучше в оболочке bash OS X
?
Hi. Не могли бы вы более подробно объяснить, что вы пытаетесь сделать? Так как код сломан, трудно использовать * это * как описание того, что вы хотите. – jpaugh