我正在尝试在当前目录中的所有子目录中搜索名为“jdk1.7”的目录。我写了一条语句,例如
find -type d -name 'jdk1*'
但我没有得到任何结果。我已验证该目录存在于当前目录的目录层次结构中。
答案1
有两种可能性:
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 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