查找所有符号链接,但告诉哪些是文件,哪些是目录

查找所有符号链接,但告诉哪些是文件,哪些是目录

我想找到目录结构中的所有符号链接,并能够区分哪些是文件链接,哪些是目录链接。

这个命令做了我需要的一切,除了告诉我哪些链接是目录,哪些链接是文件。

find . -type l -ls

答案1

我猜你想找到哪些文件常规文件以及哪些是目录

所以你可以使用这样的东西:

解决方案1

find -type l -exec stat -L --printf '%n is a %F\n' {} +

如果您有指向命名管道或任何其他类型文件的符号链接,上面的命令也会打印它们。

忽略损坏的链接:

find -type l ! -xtype l -exec stat -L --printf '%n is a %F\n' {} +
#or
find -type l -not -xtype l -exec stat -L --printf '%n is a %F\n' {} +
#Or
find -type l -readable  -exec stat -L --printf '%n is a %F\n' {} +

用于stat -L跟踪链接,而%n%F分别用于获取文件名和文件类型。

例如,具有以下结构:

lrwxrwxrwx 1 edgar edgar   65 Nov 29 17:51 dirOne2Link -> /home/edgar/Documents/Gitlab/Linux_programming/testing/forums/one
lrwxrwxrwx 1 edgar edgar   65 Nov 29 17:54 fileTwo2Link -> /home/edgar/Documents/Gitlab/Linux_programming/testing/forums/two
drwxr-xr-x 2 edgar edgar 4096 Nov 29 17:50 one
-rwxr--r-- 1 edgar edgar  201 Nov 25 21:13 script
-rw-r--r-- 1 edgar edgar    0 Nov 29 17:50 two

使用find上面的命令我得到:

./fileTwo2Link is a regular empty file
./dirOne2Link is a directory

解决方案2

您也可以 find不使用-exec stat ...

find -type l  -printf "%p is a %Y\n"

通过上面的命令我得到:

./pipelink is a p
./fileTwo2Link is a f
./onemorebroken is a N
./dirOne2Link is a d
./broken is a N

其中p是命名管道,f是常规文件,N是不存在的文件(例如断开的链接),d是目录。

相关内容