Мне интересно, возможно ли объявить массив типов файлов для поиска с помощью команды find?

Так

fileTypes=(*.omf *.jpeg *.xml *.otf)
find . -name ${fileTypes}

Вместо:

find . -name '*.omf' -o -name '*.jpeg' -o -name '*.xml' -o -name '*.otf'

1 ответ1

1

Я не верю, что это поддерживается изначально командой find, но вы можете перебрать команду find с этим одним вкладышем для достижения желаемой функциональности:

for type in ${fileTypes[@]};do find -name "${type}"; done

Только одно примечание: если вы определяете массив с использованием подстановочных знаков в каталоге, где любые файлы соответствуют шаблону, тогда глобализация выполнит расширение имени файла для файла и поместит это имя файла в ваш массив. Это приведет к тому, что итерация команды find будет выполнять поиск только по этому имени файла, а не по всем файлам с таким расширением. Вы можете избежать этого потенциального падения, определив массив без подстановочных знаков:

fileTypes=(.omf .jpeg .xml .otf)

Затем добавьте подстановочный знак в команду поиска: find -name "*${type}"

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