Найти все файлы с определенным расширением в Unix? - PullRequest
49 голосов
/ 22 декабря 2011

У меня есть файл /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Я пытаюсь найти, есть ли где-нибудь еще на моем жестком диске * .jdk.Поэтому я выполняю команду поиска:

find . -name "*.jdk"

Но она ничего не находит.Даже не тот, который я знаю, что у меня есть.Как так?

Ответы [ 5 ]

95 голосов
/ 22 декабря 2011

find . выглядит только в вашем текущем каталоге. Если у вас есть права на поиск файлов в других каталогах (root-доступ), вы можете использовать следующее для поиска вашего файла -

find / -type f -name "*.jdk"

Если вы получаете тонны сообщений об отказе в разрешении, вы можете подавить это, выполнив

find / -type f -name "*.jdk" 2> /dev/null
10 голосов
/ 22 декабря 2011

а /

find . означает «найти (начиная с текущего каталога)». Если вы хотите выполнить поиск по всей системе, используйте find /; чтобы искать под /System/Library, используйте find /System/Library и т. д.

б /

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

    find . -name *.jdk

Если, однако, у вас есть файлы junk.jdk и foo.jdk в текущем каталоге при запуске, find будет вместо этого начинаться с:

    find . -name junk.jdk foo.jdk

… что (так как их два) запутает и приведет к ошибке. Если вы затем удалите foo.jdk и сделаете то же самое снова, у вас будет

    find . -name junk.jdk

… который никогда не найдет файл с именем (например) 1.6.0.jdk.

Что вы, вероятно, хотите в этом контексте, это

    find /System -name '*.jdk'

… или вы можете «убежать» от * как:

    find /System -name \*.jdk
6 голосов
/ 22 декабря 2011

Возможно, ваши JDK написаны заглавными буквами и / или версия find, доступная в OS X, по умолчанию не имеет значения -print, если не указано никаких действий; попробовать:

find . -iname "*.jdk" -print

(-iname похоже на -name, но выполняет сопоставление без учета регистра; -print говорит find распечатать результаты)

--- РЕДАКТИРОВАТЬ ---

Как отметил @Jaypal, очевидно, find . ... просматривает только текущий каталог (и подкаталоги), если вы хотите выполнить поиск по всему диску, вы должны указать / в качестве пути поиска.

2 голосов
/ 22 декабря 2011

'.' вы используете это текущий каталог. Если вы начинаете в своем домашнем каталоге, он, вероятно, пропустит файлы JDK.

Поиск в худшем случае начинается с root

 find / -name '*.jdk' -o -name '*.JDK' -print

В противном случае замените '/' на какой-то путь, который, как вы уверены, должен быть вашим JDK-файлом.

Надеюсь, это поможет.

0 голосов
/ 04 сентября 2018

find / -type f -name "* .jdk" также работает на Mac

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...