знайти виключити каталог


13

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

find | less  

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

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

Як виключити .directoryкоманду find

Відповіді:


14

Під час дослідження подібного findрішення я виявив корисне пояснення щодо того, як використовувати "-prune" варіант "знайти" в 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.