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

Per*_*car 4 bash perl

我想知道是否有一些相当简单的 shell 咒语来计算目录的磁盘使用情况(使用du命令),但有以下要求:不应遵循指向目录内文件/子目录的符号链接,而是指向外部文件/子目录的符号链接应该。或者我是否需要编写一些脚本来完成此操作。

Ond*_* K. 6

除非我在您的问题中遗漏了某些内容,否则du在指示遵循符号链接 ( -L)时已经这样做了。

我有两棵树:

tree1/

??? dir1
?   ??? file
??? dirA -> ../tree2/dirA
??? link1 -> dir1
Run Code Online (Sandbox Code Playgroud)

tree2/

.
??? dirA
    ??? file
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,文件大小均为 1MB。

现在运行du -shLtree1/

$ du -shL tree1
2.0M    tree1
Run Code Online (Sandbox Code Playgroud)

虽然文件可以在tree1/以下符号链接中看到 3 次:

$ find tree1 -follow -type f
tree1/dirA/file
tree1/link1/file
tree1/dir1/file
Run Code Online (Sandbox Code Playgroud)

它只计入总数的两倍。即一次来自tree1/和一次链接来自tree2/dirA/(或者我理解的你的意思来自外部/不是 的子目录tree1/)。

这似乎也有道理,因为作为同一棵树内的链接,它们并没有真正消耗额外的磁盘空间(超出符号链接条目)。


我也增加tree1了一点:

.
??? dir1
?   ??? file
??? dir2
?   ??? file -> ../dir1/file
??? dirA -> ../tree2/dirA
??? link1 -> dir1
Run Code Online (Sandbox Code Playgroud)

并跑了:

$ du -abcL .
1048576 ./dir2/file
1048636 ./dir2
1048576 ./dirA/file
1048636 ./dirA
60      ./link1
2097452 .
2097452 total
Run Code Online (Sandbox Code Playgroud)

如您所见,链接仅计入.链接条目大小的总数/大小(尽管我承认60让我感到困惑,但是,我希望4)而不是它们指向的文件的(取消引用)内容。

这是你想要的还是足够接近的?