Existem duas possibilidades:
-
jdk1.7
não é um diretório real. -
jdk1.7
é um diretório, mas não um subdiretório real de.
.
Considere o seguinte exemplo:
$ 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
Para fins práticos, jdk
pode ser considerado como um subdiretório de a
, b
e c
. No entanto, o comando find
será bem-sucedido apenas para o primeiro.
./b/jdk
é um link simbólico para a/jdk
, portanto, não corresponderá ao predicado -type d
. Ele corresponderia a -type l
, mas também os links simbólicos para arquivos.
./c/a/jdk
é um diretório real, mas ./c/a
é apenas um link simbólico para ./a
. Por padrão, o find não segue links simbólicos, por isso não examinará o conteúdo aparente de ./c/a
.
Para instruir a localizar os links simbólicos sempre que eles forem encontrados, use o sinalizador -L
:
$ find -L a b c -type d -name jdk
a/jdk
b/jdk
c/a/jdk