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


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

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\(\|/.*\)' \)

Чертовски уверен, что это не похоже на то, что просил ОП.
me_and

Я просто подумал, что это то, что он имел в виду.directory
yuyichao
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.