1

Я пытаюсь найти во всех подкаталогах текущего каталога каталог с именем 'jdk1.7'. Я написал заявление типа find -type d -name 'jdk1*' Но я не получаю никаких результатов. Я проверил, что каталог присутствует в иерархии каталогов текущего каталога.

1 ответ1

2

Есть две возможности:

  • jdk1.7 не является действительным каталогом.

  • jdk1.7 - это каталог, но не фактический подкаталог . ,

Рассмотрим следующий пример:

$ mkdir a a/jdk
$ touch a/jdk/somefile
$ mkdir b c
$ ln -s ../a/jdk b/
$ ln -s ../a c/
$ find -L | sort
.
./a
./a/jdk
./a/jdk/somefile
./b
./b/jdk
./b/jdk/somefile
./c
./c/a
./c/a/jdk
./c/a/jdk/somefile
$ find a -type d -name jdk
a/jdk
$ find b -type d -name jdk
$ find c -type d -name jdk

Для большинства практических целей jdk можно рассматривать как подкаталог a , b и c . Однако команда find будет успешной только для первого.

./b/jdk - это символическая ссылка на a/jdk , поэтому она не будет соответствовать предикату -type -type d . Это будет соответствовать -type l , но так же будут символические ссылки на файлы.

./c/a/jdk - это фактический каталог, но ./c/a это просто символическая ссылка на ./a . По умолчанию команда find не следует по символическим ссылкам, поэтому она не проверяет видимое содержимое ./c/a .

Чтобы указать find найти символические ссылки, когда они встречаются, используйте флаг -L :

$ find -L a b c -type d -name jdk
a/jdk
b/jdk
c/a/jdk

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .