2015-08-21 3 views
3

Я чувство рефакторинга требуется на данном сценарии оболочки:Как уменьшить количество последовательных поисков (1)?

find -name *.java >> filelist.txt && find -name *.ftl >> filelist.txt && find -name *.xhtml >> filelist.txt && find -name *.html >> filelist.txt && find -name *.jrxml >> filelist.txt && find -name *.xml >> filelist.txt 

Он ищет для некоторых типов файлов рекурсивны. Как бы вы минимизировали этот код?

Спасибо.

ответ

6

Вы можете комбинировать выражения с -o флагом, поэтому она становится:

find -name '*.java' -o -name '*.xhtml' -o -name '*.jrxml' >> filelist.txt 

И так далее для других типов файлов. Примечание: укажите шаблон, '*.java', а не только *.java, иначе вы найдете риск *.java развернуть в .java-файлы в вашем текущем каталоге.

4

Если порядок имен файлов в filelist.txt не имеет значения, вы можете использовать оператор -o (что означает «или»), как это:

find -name "*.java" -o -name "*.ftl" ... >> filelist.txt 

Обратите внимание, что это изменит порядок файлов в filelist.txt как с вашей командой, все *.java файлов будут первыми, то все *.ftl файлов и т.д.

-2

Попробуйте эту команду:

for a in *.java *.xhtml *.jrxml; do find -name ${a} >> ; done 
+2

Это не уменьшает количество вызовов 'find'; это просто делает код более компактным. Кроме того, у вас не может быть обвисшего оператора '>>', как вы показываете. – chepner

Смежные вопросы