如何在一个命令行中 ls 并知道符号链接的目标?

如何在一个命令行中 ls 并知道符号链接的目标?

我需要在一个命令行中获取文件夹内容,现在如果我执行 stat 或 ls,它会告诉我文件类型是符号链接,但它不会告诉我它是文件还是文件夹。

我正在用这个;

stat -c '{"name": "%n", "size": "%s", "perms":"%a","type":"%F","user":"%U", "dereference","%N"}' /*;

重点是,我需要一行代码和非常快速的输出。我无法通过 ls 来解决这个问题,也许可以使用 find、locate 等方法。或者你知道如何从 mlocatedb 读取吗?

谢谢,

答案1

尝试添加另一个字段:

stat -c '{L"name": "%n", "size": "%s", "perms":"%a","type":"%F","user":"%U", "dereference":"%N"}' /* | 
    sed '/\/\o47\"\}$/ {s/\}/,\"dir\":\"yes\"\}/;b}; s/\}$/,\"dir\":\"no\"\}/'

顺便说一下,我把“取消引用”后面的逗号改为冒号。

答案2

ls -l将显示链接的目标。这是您需要的吗?另一个选项是readlink <file>

哎呀,抱歉,我没有读完那里的所有内容。怎么样ls -lL-L告诉 ls 取消引用链接,因此您将在那里看到目标而不是链接。

答案3

stat还知道取消引用符号链接的选项-L。使用此参数尝试您的调用。

答案4

您可以尝试使用 xargs 进行 find ...类似这样

find <PATH> -type l | xargs -I{} -t 'find {} -type d;'

这将

  • 查找所有链接
  • 将结果传递给另一个仅限于子目录的 find

你可能需要稍微调整一下,因为我不知道你的背景,而且我也没有符合你需求的样本文件集来测试它。这里的帖子很好描述机制

相关内容