У меня есть находка, похожая на эту:
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
Я хотел бы добавить, чтобы исключить каталог под названием «тест» из находки, но я не могу понять, как добавить » типа 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
С уважением,
Вы можете использовать опцию -path
, чтобы найти и объединить ее с оператором -not
.
find . ! -path "*/test/*" -type f -name "*.js" ! -name "*-min-*" ! -name "*console*"
Обратите внимание на две вещи
-path
должны прийти в качестве первого аргумента -path test
не будет совпадать с чем угодно, когда-либо Кстати, я не уверен, почему вы используете скобки, это не имеет значения. Он используется только для приоритета, для таких конструкций, как ! \( -name '*bla*' -name '*foo*' \)
(то есть, не найти вещи, которые имеют bla
и foo
).
Еще одно уточнение: нет необходимости использовать цикл bash, вы можете просто сделать
find . ... -exec cat {} \; -exec echo \;
где ... другие аргументы find
.
Чтобы расширить то, что я думаю, @CharlesClavadetscher
собирался с его ответом. Если вы пропустите путь с -not -path ...
, find kbd> продолжит нисходящий путь. Вместо этого использование -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*"