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

Поиск всех файлов с определенным расширением в Unix?

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

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

find . -name "*.jdk"

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

4b9b3361

Ответ 1

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

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

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

find / -type f -name "*.jdk" 2> /dev/null

Ответ 2

a/

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

Ответ 3

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

find . -iname "*.jdk" -print

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

--- EDIT ---

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

Ответ 4

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

Наихудший поиск в этом случае начинается с root

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

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

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