Подтвердить что ты не робот

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

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

$ find /usr -name *.sh

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

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

Почему не работает find?

4b9b3361

Ответ 1

Попробуйте указать шаблон:

$ find /usr -name \*.sh

или

$ find /usr -name '*.sh'

Если у вас есть файл, который соответствует *. sh в текущем рабочем каталоге, подстановочный знак будет расширен до того, как найдет его. Если у вас есть файл с именем 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'

Ответ 2

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

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

Ответ 3

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

locate '/usr*.sh'