在Linux中查找子目录

在Linux中查找子目录

我正在尝试在当前目录中的所有子目录中搜索名为“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。但是,该命令仅对第一个成功。bcfind

./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

相关内容