Використання масиву як пошукової критериї для команди find


1

Мені цікаво, чи можна оголосити масив типів файлів, який потім слід шукати за допомогою команди find?

Тому

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

Замість:

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

Відповіді:


1

Я не вірю, що це підтримується командою find, але ви можете перевести цикл на команду find за допомогою цього вкладиша, щоб досягти бажаної функціональності:

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

Лише одна примітка, якщо ви визначаєте масив за допомогою підстановних знаків у каталозі, де будь-які файли відповідають шаблону, то глобалінг виконуватиме розширення імені файлу та розміщує це ім'я у вашому масиві. Це призведе до того, що ітерація команди find шукає лише це ім'я файлу, а не всі файли з цим розширенням. Ви можете уникнути цього потенційного падіння, визначивши масив без підстановок:

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

Потім додайте підстановку до команди find: find -name "*${type}"


Щоб слідкувати за фактом .. Я використовував fileTypes [@] замість fileTypes [*]. Чи використовується "@" більше для просто роздрукування всіх елементів, а не для повторення масиву?
dddddddddd

Обидва мають дуже схожу операцію з невеликим нюансом, пояснено тут: stackoverflow.com/a/3355375/5495979 Я фактично вважаю за краще використовувати також [@], і якщо чесно, я використовую це і [*] взаємозамінно, але я мав у моїй відповіді використовували подвійні лапки навколо змінної масиву, вона б порушила рішення, так що так, продовжуйте використовувати [@], оскільки в цьому випадку це буде надійним. Радий, що ти це вигадав, бо я збираюся змінити це у своїй відповіді на більш надійне рішення.
element4lifex8
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.