Ответ 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'