Проверьте, существует ли определенный тип файла / расширение в каталоге - PullRequest
60 голосов
/ 04 октября 2010

Как бы вы узнали, присутствуют ли в каталоге файлы определенного расширения с помощью bash?

Что-то вроде

if [ -e *.flac ]; then 
echo true; 
fi 

Ответы [ 13 ]

1 голос
/ 04 октября 2010

только bash:

any_with_ext () ( 
    ext="$1"
    any=false
    shopt -s nullglob
    for f in *."$ext"; do
        any=true
        break
    done
    echo $any 
)

if $( any_with_ext flac ); then
    echo "have some flac"
else 
    echo "dir is flac-free"
fi

Я использую скобки вместо фигурных скобок, чтобы убедиться, что используется подоболочка (не хочу затуманивать текущую настройку nullglob).

0 голосов
/ 12 февраля 2019

Вот довольно простое решение:

if [ "$(ls -A | grep -i \\.flac\$)" ]; then echo true; fi

Как видите, это только одна строка кода, но она работает достаточно хорошо.Он должен работать как с bash, так и с посикс-совместимой оболочкой, такой как dash.Он также нечувствителен к регистру и не имеет значения, какие типы файлов (обычные, символические ссылки, каталоги и т. Д.) Присутствуют, что может быть полезно, если у вас есть несколько символических ссылок или что-то еще.

0 голосов
/ 01 августа 2018

Для завершения, с zsh:

if [[ -n *.flac(#qN) ]]; then
  echo true
fi

Это указано в конце раздела Условные выражения в руководстве по zsh.Поскольку [[ отключает глобализацию имени файла, нам нужно принудительно генерировать имя файла, используя (#q) в конце строки глобинга, а затем флаг N (опция NULL_GLOB), чтобы сгенерированная строка была пустой в случае, если нетматч.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...