[Resolved] Как исключить каталог из find. команда?
Вопрос:
Я пытаюсь запустить find
для всех файлов JavaScript, но как мне исключить конкретный каталог?
Здесь find
код, который мы используем.
for file in $(find . -name "*.js')
do
java -jar config/yuicompressor-2.4.2.jar --type js $file -o $file
done
Отвечать:
Использовать -prune
выключатель. Например, если вы хотите исключить misc
каталог просто добавьте -path ./misc -prune -o
к вашей команде поиска:
find . -path ./misc -prune -false -o -name '*.txt'
Вот пример с несколькими каталогами:
find . -type d ( -path dir1 -o -path dir2 -o -path dir3 ) -prune -false -o -name '*.txt'
Здесь мы исключаем ./dir1, ./dir2 а также ./dir3 в текущем каталоге, так как в find
выражения это действие, которое действует в соответствии с критериями -path dir1 -o -path dir2 -o -path dir3
(если dir1 или dir2 или dir3), И с type -d
.
Чтобы исключить имя каталога на любом уровне, используйте -name
:
find . -type d ( -name node_modules -o -name dir2 -o -path name ) -prune -false -o -name '*.json'
Если -prune
не работает для вас, это будет:
find -name "*.js" -not -path "./directory/*"
Предостережение: требует обхода всех нежелательных каталогов.