我需要在一个命令行中获取文件夹内容,现在如果我执行 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
你可能需要稍微调整一下,因为我不知道你的背景,而且我也没有符合你需求的样本文件集来测试它。这里的帖子很好描述机制