Использование оператора «not» с find не работает должным образом

У меня есть каталог «X» с подкаталогом «lib», а также другие файлы и каталоги. Этот подкаталог "lib", в свою очередь, содержит несколько каталогов и файлов. Я пытаюсь использовать find, чтобы получить имена путей ко всему в каталоге X, кроме всего, что связано с "lib".

Итак, я попытался сделать это: find -not -name "lib*"

Это исключит путь ./lib из выходных данных, но включит все в сам каталог lib, т.е. lib/*. Я также попробовал:

find -not -name "lib/*"

, но это дало мне тот же результат

PS: Я также попробовал find -not -name lib*, но все еще получил тот же результат

0
задан 19 August 2019 в 13:15

1 ответ

-name опция к find взгляды только на отдельное имя файла, не полный путь в файл. Если Вы хотите соответствовать на полном пути, Вам нужно -path опция.

Некоторые примеры в быстром тестовом дереве я создал:

$ find .
.
./b
./a
./lib
./lib/la
./lib/lb

, Что Вы делаете с -name (пропуски lib самостоятельно, но не пропускает файлы в lib, потому что это только смотрит на отдельные имена файлов):

$ find . -not -name 'lib*'
.
./b
./a
./lib/la
./lib/lb

, Что Вы, вероятно, хотите:

$ find . -not -path './lib*'
.
./b
./a

Примечание это, потому что -path взгляды полный путь, я теперь должен добавить начальную букву ./ префикс также.

2
ответ дан 23 October 2019 в 05:19

Другие вопросы по тегам:

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