Сведения о вопросе

Junior

03:36, 14th August, 2020

Теги

bash   unix   shell   ksh    

Почему **find** ничего не находит?

Просмотров: 382   Ответов: 3

Я ищу файлы скриптов shell, установленные в моей системе, но найти не работает:

$ find /usr -name *.sh

Но я знаю, что есть тонна сценариев там. Например:

$ ls /usr/local/lib/*.sh
/usr/local/lib/tclConfig.sh  
/usr/local/lib/tkConfig.sh

Почему не находит работу?



  Сведения об ответе

P_S_S

11:02, 3rd August, 2020

Попробую процитировать по шаблону:

$ find /usr -name \*.sh

или:

$ find /usr -name '*.sh'

Если у вас случайно есть файл, который соответствует *.sh в текущем рабочем каталоге подстановочный знак будет развернут до того, как его увидит find. Если в вашем рабочем каталоге есть файл с именем tkConfig.sh, команда find развернется на:

$ find /usr -name tkConfig.sh

что позволит найти только файлы с именем tkConfig.sh. Если у вас есть более одного файла, который соответствует *.sh , вы получите синтаксическую ошибку от find :

$ cd /usr/local/lib
$ find /usr -name *.sh
find: bad option tkConfig.sh
find: path-list predicate-list

Опять же, причина заключается в том, что подстановочный знак расширяется до обоих файлов:

$ find /usr -name tclConfig.sh tkConfig.sh

Цитирование подстановочного знака предотвращает его преждевременное расширение.

Другая возможность заключается в том, что /usr или один из его подкаталогов является символьной ссылкой. поиск обычно не следует по ссылкам, поэтому вам может понадобиться опция -follow :

$ find /usr -follow -name '*.sh'


  Сведения об ответе

прога

23:56, 5th August, 2020

В некоторых системах (например, Solaris) нет действия по умолчанию, поэтому вам нужно добавить команду-print.

find /usr -name '*.foo' -print


  Сведения об ответе

dump

12:32, 4th August, 2020

Для поиска файлов на ваших дисках используйте вместо этого функцию "locate", которая является мгновенной (заглядывает в ежедневный встроенный индекс) вы примером будете:

locate '/usr*.sh'


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться