У меня есть каталог с именем test
, который имеет подпапки в диапазоне дат, например 01
, 02
, ... 31
. Все подпапки содержат файлы .bz2. Мне нужно искать все файлы с расширением .bz2, используя команду find, но исключая определенный диапазон каталогов. Я знаю о find . -name ".bz2" -not -path "./01/*"
, но писать -not -path "./01/*"
было бы так жалко, если бы я хотел пропустить 10 каталогов. Итак, как бы я пропустил подкаталоги 01..19
в моей команде find
?Исключить диапазон каталогов в команде find
ответ
Вы можете использовать групповые символы в шаблоне для опции -not -path
:
find ./ -type f -name "*.bz2" -not -path "./0*/*" -not -path "./1*/*
это позволит исключить все каталоги, начиная с 0 или 1. Или еще лучше:
find ./ -type f -name "*.bz2" -not -path "./[01]*/*"
Во-первых, вы можете помочь find
, используя -prune
, а не -not -path
- это позволит избежать даже поиска в соответствующих каталогах.
К вашему главному - вы можете создать символ для вашего примера (числовая 01 до 19 лет):
find . -path './0[1-9]' -prune -o -path './1[0-9]' -prune -o -print
Если диапазон менее удобен (например, от 05 до 25), вы можете создать диапазон в переменную Баш, а затем интерполировать, что в find
команду:
a=("-path ./"{05..25}" -prune -o")
find . ${a[*]} -print -prune
(вы можете захотеть echo "${a[*]}"
или printf '%s\n' ${a[*]}
, чтобы увидеть, как это работает)
Для меня я нашел команду как самостоятельный инструмент, как-то громоздкий. Поэтому я всегда использую комбинацию для поиска только для поиска рекурсивного файла и grep, чтобы сделать фактический материал для изъятия/включения. Наконец, я передаю результаты третьей команде, которая будет выполнять действия, например, rm, чтобы удалить файлы, например.
Моя общая команда будет выглядеть примерно так:
find [root-path] | grep (-v)? -E "cond1|cond2|...|condN" | [action-performing-tool]
- корневой путь, где начать поиск рекурсивно
- добавить -v опция используется, чтобы инвертировать результаты сопоставления.
- cond1 - condN, условия для соответствия. Когда -v является инволюцией, то это условия для не матч.
- действие-исполнительской-инструмент делает фактическую работу
Например, вы хотите, чтобы удалить все файлы не соответствие некоторых условий в текущем каталоге:
find . -not -name "\." | grep -v -E "cond1|cond2|cond3|...|condN" | xargs rm -rf
Как вы можете видеть, мы ищем в текущем каталоге, указанном точкой в качестве корневого пути: тогда мы хотим инвертировать результаты сопоставления, потому что мы хотим, чтобы все файлы не, соответствующие нашим условиям: и, наконец, мы передаем все найденные файлы rm, чтобы удалить их: я добавляю -rf к рекурсивному/принудительному удалению всех файлов. Я использовал команду find с -not -name ".", чтобы исключить текущий каталог, обозначенный обычно точкой.
Для actuall вопрос: Предположим, у нас есть каталог с помощью .git и .metadata каталога, и мы хотим, чтобы исключить их в нашем поиске:
find . -not -name "\." | grep -v -E ".git|.metadata" | [action-performing-tool]
Надежда, что помогает!
- 1. Вопрос о команде «find»
- 2. Переменные в команде find exec
- 3. Использование строки в команде find
- 4. Исключить определенные имена каталогов
- 5. iCalendar исключить диапазон дат
- 6. Как исключить каталог с помощью find + grep?
- 7. Как работает оператор AND в команде FIND?
- 8. Опустить имя каталога в команде find
- 9. Как использовать переменную в команде find?
- 10. Игнорировать дубликаты имен файлов в команде 'find'
- 11. Возможно ли передать команду find команде -exec другой команды find?
- 12. Хотите исключить папку в команде tar
- 13. Исключить весь текст в команде эха
- 14. Как передать конкретный файл команде find?
- 15. вопросы по команде Linux «find -exec {}»
- 16. Исключить определенные поля в HABTM find()
- 17. Как чернослив из двух каталогов в команде находят
- 18. Исключая неизвестное число нескольких каталогов от поиска FIND (Unix)
- 19. Как передать элемент vetor команде find unix?
- 20. Случайный диапазон номеров, исключить 0
- 21. Как распечатать список каталогов и файлов и исключить имена каталогов?
- 22. bash: Фильтрация каталогов и расширений из find?
- 23. Как исключить файлы по имени в команде поиска ClearCase?
- 24. Perl File :: Find :: Rule исключением каталогов из массива
- 25. Как исключить массив id из метода find?
- 26. Исключить каталоги с определенным префиксом, используя find
- 27. jQuery: как исключить идентификаторы из .find()?
- 28. jQuery исключить селекторные совпадения из результатов #find
- 29. Как исключить несколько каталогов с Exuberant ctags?
- 30. Как исключить дерево каталогов на 'git fetch'
Большое вам спасибо. работал как шарм. +1. – Rahul