我有一个位于 NFS 上的文件日志,它们通过本地 Redhat 服务器上的软链接进行连接。
当我尝试搜索上周末触及的任何文件并计算它们的总大小时,我发现结果是错误的。
find . -mtime +3 -a -mtime -5 -ls
这给了我上周末触及的文件的名称、路径、大小、gid、uid 等。太棒了。
问题出在软链接上。它仅报告链接大小本身,而不报告其链接的文件。所以链接可能只有 102 字节,而实际文件有 24G。此外,它似乎在某处重复计算,因为它告诉我,当总存储大小为 11TB 时,我有 23TB 的文件。
有办法解决这个问题吗?
谢谢
答案1
使用该-L
标志来跟踪符号链接。
遵循符号链接。当 find 检查或打印有关文件的信息时,所使用的信息应取自链接指向的文件的属性,而不是取自链接本身(除非它是损坏的符号链接或 find 无法检查其指向的文件)链接点)。使用此选项意味着 -noleaf。如果您稍后使用 -P 选项,-noleaf 仍然有效。如果 -L 有效并且 find 在搜索过程中发现到子目录的符号链接,则将搜索该符号链接指向的子目录。
当 -L 选项有效时, -type 谓词将始终与符号链接指向的文件类型而不是链接本身匹配(除非符号链接已损坏)。使用 -L 会导致 -lname 和 -ilname 谓词始终返回 false。
答案2
readlink -f
会给你一个符号链接的目标;然后,您可以使用stat
的输出reddlink
来获取磁盘上实际文件的数据。您还可以使用find -L
跟踪符号链接到其目标,然后另外,| sort | uniq
以免重复计算在谓词规范内链接到的文件find
。