使用linux find命令查找目录和目录的符号链接

Håk*_*and 1 linux bash shell command find

对于linux中的给定目录树,我想列出:

  • 所有目录,
  • 所有指向目录的符号链接
  • 不是通过遵循符号链接找到的目录.

考虑一个空目录,然后执行

mkdir a
mkdir a/b
ln -s a c
echo "x" > f1
ln -s f1 f2
Run Code Online (Sandbox Code Playgroud)

然后find . -type d给出

.
./a
./a/b
Run Code Online (Sandbox Code Playgroud)

所以错过了符号链接./c,wheras find . -type l

./c
./f2
Run Code Online (Sandbox Code Playgroud)

它错过了目录.,./a./a/b,并且还打印了符号链接./f2,该符号链接不是目录的符号链接,而是打印到文件.

Bar*_*mar 5

使用-H选项:

导致为命令行上指定的每个符号链接返回的文件信息和文件类型(请参阅stat(2))是链接引用的文件,而不是链接本身.如果引用的文件不存在,则文件信息和类型将用于链接本身.不在命令行上的所有符号链接的文件信息是链接本身的文件信息.

所以:

find -H . -type d
Run Code Online (Sandbox Code Playgroud)

将列出目录和目录链接.

  • GNU find有`-L`,但它也可以通过目录链接进行递归. (3认同)
  • 必须在找到工作后立即指定:`find -L.-type d`. (2认同)