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

时间:2019-01-13 13:04:50

标签: bash perl

我想知道是否存在一些相当简单的shell命令来计算目录的磁盘使用情况(使用du命令),但具有以下要求:不应遵循指向目录内文件/子目录的符号链接,但应与外部文件/子目录建立符号链接。还是我需要做一些脚本来完成这个任务。

1 个答案:

答案 0 :(得分:3)

除非我错过了您的问题,否则当指示遵循符号链接(du)时,-L已经做到了。

我有两棵树:

tree1/

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

tree2/

.
└── dirA
    └── file

两种情况下文件的大小均为1MB。

现在在du -shL上运行tree1/

$ du -shL tree1
2.0M    tree1

遵循符号链接时,在tree1/中可以看到该文件3次:

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

它只算了两次。即一次来自tree1/,一次来自tree2/dirA/链接(或者我理解为您的意思,来自外部/不是tree1/的子目录)。

这似乎也很有意义,因为它们是同一棵树中的链接,它们实际上并没有消耗额外的磁盘空间(除了symlink条目之外)。


我也将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

如您所见,链接仅计入链接条目大小的{/ {1}}的总数/大小中(即使我承认.使我困惑,但我希望60 ),而不是(指向的)文件所指向的内容。

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

相关问题