du:如果符号链接指向外部目录,则跟随符号链接,否则不要跟随

6

我想知道是否有一些简单的shell命令可以计算目录的磁盘使用情况(使用du命令),但需要满足以下要求:不应该跟随指向目录内文件/子目录的符号链接,但是应该跟随指向外部文件/子目录的符号链接。或者我需要编写一些脚本来完成这个任务。

1个回答

9

除非我在你的问题中漏掉了什么,否则当指示跟随符号链接(-L)时,du 已经可以实现这一点。

我有两棵树:

tree1/:

├── dir1
│   └── file
├── dirA -> ../tree2/dirA
└── link1 -> dir1

还有tree2/:

.
└── dirA
    └── file

文件大小均为1MB。

现在在tree1/上运行du -shL命令:

$ du -shL tree1
2.0M    tree1

当跟随符号链接时,可以在 tree1/ 中看到三次文件:

$ find tree1 -follow -type f
tree1/dirA/file
tree1/link1/file
tree1/dir1/file

这只计入了总数两次。一次来自 tree1/,另一次来自从 tree2/dirA/ 链接过来的(或者我理解为不是 tree1/ 的子目录之外的链接)。

这似乎也是有道理的,因为作为同一棵树内的链接,它们实际上并不会消耗额外的磁盘空间(除了符号链接条目之外)。


我还将 tree1 增加了一点:

.
├── dir1
│   └── file
├── dir2
│   └── file -> ../dir1/file
├── dirA -> ../tree2/dirA
└── link1 -> dir1

并运行:

$ du -abcL .
1048576 ./dir2/file
1048636 ./dir2
1048576 ./dirA/file
1048636 ./dirA
60      ./link1
2097452 .
2097452 total

如您所见,链接仅计入.的总大小/大小,其中包含链接条目的大小(尽管我承认60让我有些困惑,我会期望4),而不是它们指向的文件的内容(已取消引用)。

这是否是您想要的或足够接近?


当然,你是正确的!一个简单的-L就可以实现我想要的。 - Perl Ancar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接