我想知道是否有一些相当简单的 shell 咒语来计算目录的磁盘使用情况(使用du命令),但有以下要求:不应遵循指向目录内文件/子目录的符号链接,而是指向外部文件/子目录的符号链接应该。或者我是否需要编写一些脚本来完成此操作。
除非我在您的问题中遗漏了某些内容,否则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 -shL于tree1/:
$ 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)而不是它们指向的文件的(取消引用)内容。
这是你想要的还是足够接近的?