我正在 Debian 服务器上工作,我只能在没有 sudo 的情况下访问控制台。名为“应用程序”的主文件夹包含包含我拥有的所有项目的子文件夹。
但是,当我通过管理面板创建新项目时,文件夹名称是一个无意义的字符串,您可以通过创建指向新文件夹的符号链接来重命名它。
例如,应用程序文件夹是这样的:
applications/
abuwryjbrb
evharjqgxj
MyCustomProjectName1
MyCustomProjectName2
我想检查每个应用程序使用了多少空间。由于我在 Unix 方面没有太多经验,我用 google 搜索了一下,发现我可以用du -sh *
.
然而,输出是这样的:
91M abuwryjbrb
201M evharjqgxj
0 MyCustomProjectName1
0 MyCustomProjectName2
结果,我要一一检查名称并查看哪个文件夹是哪个,这太耗时了。
有没有办法获得符号链接的磁盘使用情况的输出?
相反du -sh -L *
,我不会得到原始文件夹和符号链接的重复文件夹,但得到如下混合输出:
91M abuwryjbrb
201M MyCustomProjectName1
其中一些文件夹具有原始名称,一些具有符号链接名称
答案1
您可以使用-L
标志和du
命令来使用符号链接。
du -sh -L *
应该对你有帮助。
答案2
du -sh -l -- */
尾部斜杠使通配符匹配目录和目录的符号链接。对于目录的符号链接,该命令作用于目标。
-l
(GNU 扩展如-h
)禁用du
的行为,即给定文件/目录的磁盘使用量仅计算一次。请注意,如果每个项目中存在硬链接,它也会影响报告的磁盘使用情况。
您的项目将列出两次,一次针对每个目录,一次针对其符号链接。如果有一种简单的方法来创建仅与您自己的名字匹配的通配符模式,您就可以避免这种情况。例如,如果您始终将自己的名字大写,而自动名称始终为小写,则可以使用
du -sh [[:upper:]]*/
或者,您可以使用
du -shHl -- *
这也列出了常规文件。该选项-H
(-D
在 GNU 中du
也称为-H
标准选项)指示du
取消引用命令行上传递的符号链接。不会遍历每个目录树内的符号链接(与 不同-L
,这在这里不是一个好主意)。
在 zsh 中,您可以使用
du -shH -- *(@-/)
仅作用于目录的符号链接,或du -shH -- *(@)
仅作用于符号链接,无论其目标如何。这次,我们可以省略-l
,除非同一目录有多个符号链接。
在任何 shell 中(并且使用 GNU find
),您可以使用
find . -maxdepth 1 -type l -xtype d -exec du -shH {} +
仅作用于目录的符号链接。