найти исключить каталог

13

Я нахожусь на Linux (Ubuntu), и я хотел бы исключить определенные каталоги (например, .hg), когда я делаю

find | less  

Я попробовал следующее, чтобы исключить каталог .hg из списка, но, похоже, не работает.

find -type d \( ! -iname \.hg \)
find -type d \( ! -name \.hg \)
find -type d \( ! -iname .hg \)

Как исключить .directoryиз команды поиска

Сентил Кумаран
источник

Ответы:

14

В ходе исследования аналогичного findрешения я обнаружил полезное объяснение о том, как использовать опцию «-prune» для «find» в sh? по Laurence Гонсалвес .

Вы можете использовать что-то вроде:

find . \( -type d -name .hg -prune \) -o \( -type f -name "foo" -print \)

или (без имени)

find . \( -type d -name .hg -prune \) -o \( -type f -print \)

(Избежавшие) круглые скобки \(и \)группируют тесты ( typeи name) и соответствующие действия ( pruneи print, соответственно) вместе слева и справа от ИЛИ ( -o).

Поскольку -oимеет более низкий приоритет, чем сопоставление, вы можете опустить скобки, если хотите. Многие findреализации также позволяют пропустить финал -print.

find . -type d -name .hg -prune -o -type f -name "foo" -print
fheub
источник
1
Я собирался написать свое решение, но, похоже, именно это. Лично я бы поставил -pruneвнутри первый набор скобок, а -type f -printвторой - для того, чтобы сделать операции и / или более очевидными, но в остальном это кажется мне точным.
me_and
Я улучшил скобки (и их рассуждения) благодаря комментарию @me_and.
fheub
2

Взгляните на ack: http://betterthangrep.com/

В дополнение к разумному набору исключенных папок по умолчанию (например, .hg - исключение по умолчанию), легко исключить новые папки:

ack --ignore-dir=.directory search_term

Чтобы вернуть это в ваш вариант использования, когда вы ищете список файлов, вы должны использовать -fопцию, как в:

ack -f --ignore-dir=.directory

Я перешел от написания сложных команд поиска / поиска к простым ack.

Совет: поместите часто используемые параметры командной строки (например, исключенные папки) в файл .ackrc.

Брайан Литем
источник
Основываясь на find | lessвопросе, ОП ищет простой список файлов. Как это поможет с этим?
CVN
@ MichaelKjörling Как я уже говорил в своем ответе, опция -f предоставляет список файлов.
Брайан Литем
-2

можешь попробовать

find \( ! -regex '.*/\.directory\(\|/.*\)' \)
yuyichao
источник
Чертовски уверен, что это не похоже на то, что просил ОП.
me_and
Я просто подумал, что это то, что он имел в виду.directory
yuyichao