Поиск файлов в Linux и исключение определенных каталогов

У меня есть находка, похожая на это:

rm -f crush-all.js
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | while read line
do
   cat "$line" >> crush-all.js
   echo >> crush-all.js
done

Я бы хотел добавить, чтобы исключить каталог, называемый «test» в find, но я не могу понять, как добавить «-type d» каким-то образом. Как я это сделал?

Спасибо!

1
задан 25 October 2012 в 18:57

4 ответа

find / -path ./test -prune -o ...

Переименуйте ./test, чтобы соответствовать местоположению тестового каталога.

3
ответ дан 25 May 2018 в 05:06
  • 1
    В этом случае не забудьте добавить действие -print (поскольку -print не является действием по умолчанию) после опции -o – Bill Zhao 23 June 2016 в 07:48

Вы можете попробовать с помощью grep, как это (папка здесь называется test_folder):

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/path/to/test_folder/" | while read line

или если ваш поиск возвращает относительный путь:

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "./relative_path/to/test_folder/" | while read line

или если вы хотите все папки с тем же именем, но с другим путем

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) | grep -v "/test_folder/" | while read line

С уважением,

1
ответ дан 25 May 2018 в 05:06

Расширить то, что, как я думаю, @CharlesClavadetscher было с его ответом. Если вы опустите путь с -not -path ..., поиск продолжит спуск по пути. Вместо этого, используя -prune, он перестанет спускаться дальше в пропущенный путь, делая его быстрее. Итак, вы можете сделать что-то вроде

find . -path '*test/*' -prune -o -type f -name "*.js" ! -name "*-min*" ! -name "*console*" -print
1
ответ дан 25 May 2018 в 05:06

Я использую «not wholename», когда я просто ищу файл. -name проверяет фактическое имя файла, но -wholename проверяет полный путь. Поэтому добавление игнорирования для теста на вопрос выше:

find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) ! -wholename "*test*"
0
ответ дан 25 May 2018 в 05:06

Другие вопросы по тегам:

Похожие вопросы: