У меня есть каталог «X» с подкаталогом «lib», а также другие файлы и каталоги. Этот подкаталог "lib", в свою очередь, содержит несколько каталогов и файлов. Я пытаюсь использовать find
, чтобы получить имена путей ко всему в каталоге X, кроме всего, что связано с "lib".
Итак, я попытался сделать это: find -not -name "lib*"
Это исключит путь ./lib
из выходных данных, но включит все в сам каталог lib, т.е. lib/*
. Я также попробовал:
find -not -name "lib/*"
, но это дало мне тот же результат
PS: Я также попробовал find -not -name lib*
, но все еще получил тот же результат
-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
взгляды полный путь, я теперь должен добавить начальную букву ./
префикс также.