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


17

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

$ find /usr -name *.sh 

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

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

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

+2

Является ли это суперпользователь вопроса ? 08 ноя. 092009-11-08 01:44:11

  0

Это лучше подходит для [UnixSE] (http://unix.stackexchange.com/) 17 дек. 152015-12-17 10:17:21

51

Try процитировать подстановочные знаки:

$ find /usr -name \*.sh 

или:

$ find /usr -name '*.sh' 

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

$ find /usr -name tkConfig.sh 

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

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

Что делать, если файл является сценарием оболочки, но не имеет расширения '.sh'? Может быть, что-то вроде 'find/xyz | Файл xargs | grep shell'? 14 дек. 152015-12-14 17:52:12

  0

Как часто, если скрипты оболочки ** не ** имеют расширение .sh? 16 дек. 152015-12-16 19:43:46

  0

Есть ли какой-либо общий способ выяснить, когда/где расширяется подстановочный знак? 21 дек. 152015-12-21 09:51:50

  0

Ну, растут в окнах, где * все * имеет расширение. Я видел довольно много скриптов на * ix, опустив это. .sh' 21 дек. 152015-12-21 19:29:00


15

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

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

Я был популярен в прошлом. Но я должен отметить, что в современной коробке Solaris -print включен по умолчанию. На самом деле я не могу найти поисковую систему, которая больше не работает. 08 сен. 082008-09-08 22:49:33


7

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

locate '/usr*.sh' 
  0

Прекрасное предложение. (Мне пришлось запустить updatedb на моей машине, чтобы проверить эту идею, так как у меня ее нет в моем crontab по какой-то причине. Не имея современной базы данных, это будет основной причиной, чтобы не использовать локацию.) 27 янв. 092009-01-27 18:39:51

  0

И существует несколько систем, которые по умолчанию не установлены локально. Я обнаружил, что мне пришлось установить пакет «mlocate» на моем малине Pi, не забывая впоследствии «sudo updatedb», чтобы построить индексы ... 24 дек. 152015-12-24 22:33:51