Поиск всех файлов с определенным расширением в Unix?
У меня есть файл /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Я пытаюсь найти, если у меня есть *.jdk где-нибудь еще на моем жестком диске. Поэтому я выполняю команду поиска:
find . -name "*.jdk"
Но ничего не находит. Даже тот, которого я знаю, у меня есть. Как так?
Ответы
Ответ 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 файлов.
Надеюсь, это поможет.