我想知道是否有一些简单的shell命令可以计算目录的磁盘使用情况(使用du
命令),但需要满足以下要求:不应该跟随指向目录内文件/子目录的符号链接,但是应该跟随指向外部文件/子目录的符号链接。或者我需要编写一些脚本来完成这个任务。
除非我在你的问题中漏掉了什么,否则当指示跟随符号链接(-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
),而不是它们指向的文件的内容(已取消引用)。
这是否是您想要的或足够接近?