Исключите папки с шаблоном пути, используя команду FIND на консоли Ubuntu

737
onirix
PROJECTS |___ SITE1 | |____files (to exclude) | |____img | |____js | |___ SITE2 | |____files (to exclude) | |____img | |____js | |___ SITE3 |____files (to exclude) |____img |____js 

Здравствуйте, я хотел бы искать в SITE x папках, исключая содержимое папок с файлами .

Я пытаюсь это, но он отображает мне ошибки прав доступа для файлов в папках файлов (так что, похоже, не исключаю их):

find . ! -path "*/files/*" -type f -name 'foo' 

Это отображение (я в каталоге проектов):

./SITE1/img/foo.png ./SITE1/js/foo.js find: `./SITE1/files/201501': Permission denied find: `./SITE1/files/201412': Permission denied find: `./SITE1/files/201501': Permission denied ... (the two firsts matches are pretty good, but I break the execution after, it print too many indesirble matches) 

Я был вдохновлен этим ответом на Askubuntu .

Я также пробую опцию -prune, как в этом примере, не находя решения ...


Я хотел бы иметь эквивалент этого поиска с egrep, но для имен файлов

egrep -Rns --exclude-dir=files 'foo' * 

Спасибо за вашу помощь !

0
Нам нужно гораздо больше информации. Я понятия не имею, что вы спрашиваете. У вас нет прямого вопроса. Попробуйте написать еще раз, чтобы задать конкретный вопрос. Eric F 9 лет назад 0
Если я не ошибаюсь, что возможно, исключение приводит к тому, что «попадания» не отображаются, но не мешает просмотру каталогов. Документация (вывод --help, страница руководства или что-то другое) для команды find должна указывать, как ведет себя поиск. Вы изучили эту документацию? killermist 9 лет назад 1
Это на самом деле очень легко сделать в Windows 8 ... вы застряли с `find` в Linux или вы можете использовать Windows для этого? Mokubai 9 лет назад 0
Попробуйте директиву `-prune` для` find`. Я предлагаю вам поискать примеры (есть несколько хороших прямо здесь, в Super User), потому что страница руководства сама по себе не очень хорошо освещает тему использования `-prune`. G-Man 9 лет назад 0
@Mokubai Тревожно, насколько это проще в `* nix`, чем в` Windows 8` BroSlow 9 лет назад 0
@BroSlow В Windows 8 все, что вы делаете, это щелкаете внутри поля поиска и вводите `-" files "-directory`, и он выполняет * точно * то, что запрашивается, без необходимости сначала открывать новое окно терминала,` cd`'ing до каталог, а затем выяснить синтаксис команды `find`. `* Nix` выглядит очень похоже на" длинный "путь. Но я здесь не для евангелизации, я просто хотел посмотреть, есть ли другие варианты или другой метод поможет. Mokubai 9 лет назад 1
@Mokubai Это было бы неплохо для этого примера, но он все еще менее точен (например, что если у вас есть файл с именем `files`?). BroSlow 9 лет назад 0

1 ответ на вопрос

0
onirix

Ok done !

I didn’t know how to use prune argument. This respond to my demand

find * -path "*/files/*" -prune -o -name 'foo' -type f -print 

More explication here


On the other hand I should be curious if there is a syntax with the ! (NOT) argument like in this example on AskUbuntu if someone have an idea.

Да, но пример `AskUbuntu`, который вы связали, не останавливает` find` от продолжения обхода этих каталогов, так что вы все равно получите ошибки. Ваш синтаксис ничуть не хуже, и в худшем случае никогда не медленнее (почти всегда быстрее). Хотя, обратите внимание, что используя `*` вместо `.`, вы, скорее всего, пропустите dotfiles в вашем каталоге верхнего уровня BroSlow 9 лет назад 0

Похожие вопросы