У меня есть находка, похожая на это:
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» каким-то образом. Как я это сделал?
Спасибо!
find / -path ./test -prune -o ...
Переименуйте ./test, чтобы соответствовать местоположению тестового каталога.
Вы можете попробовать с помощью 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
С уважением,
Расширить то, что, как я думаю, @CharlesClavadetscher было с его ответом. Если вы опустите путь с -not -path ..., поиск продолжит спуск по пути. Вместо этого, используя -prune, он перестанет спускаться дальше в пропущенный путь, делая его быстрее. Итак, вы можете сделать что-то вроде
find . -path '*test/*' -prune -o -type f -name "*.js" ! -name "*-min*" ! -name "*console*" -print
Я использую «not wholename», когда я просто ищу файл. -name проверяет фактическое имя файла, но -wholename проверяет полный путь. Поэтому добавление игнорирования для теста на вопрос выше:
find . -type f \( -name "*.js" ! -name "*-min*" ! -name "*console*" \) ! -wholename "*test*"