Вопрос

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

$ find /usr -name *.sh

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

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

Почему бы и нет Найти работать?

Это было полезно?

Решение

Попробуйте использовать подстановочный знак в кавычках:

$ find /usr -name \*.sh

или:

$ find /usr -name '*.sh'

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

$ find /usr -name tkConfig.sh

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

$ 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 или один из его подкаталогов является символической ссылкой. Найти обычно не переходит по ссылкам, поэтому вам может понадобиться -следовать вариант:

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

Другие советы

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

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

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

locate '/usr*.sh'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top