当我发现这个文件时,正在使用du -sch ./*浏览系统以查找可能无故存储的大的无用文件:

$ du -sch ./*
du: cannot read directory ‘./drbunsen/.gvfs’: Permission denied
du: cannot read directory ‘./drbunsen/.cache/dconf’: Permission denied
18G ./drbunsen
18G total

$ cd drbunsen/
$ du -sch ./*
601M ./Desktop
20K ./Documents
598M ./Downloads
4.0K ./flash
4.0K ./Music
8.0M ./Pictures
4.0K ./Public
4.0K ./Templates
4.0K ./Ubuntu One
8.0K ./Videos
11G ./VirtualBox VMs
6.9M ./workspace
12G total


如何制作隐藏文件可见? du -sch ./.*给出与du -sch ./*相同的结果。

评论

du -hs。[^。] * *用于所有隐藏文件,不包括。和..其他答案似乎丢失了。

这里没有足够的代表来回答这个高度活跃的问题,因此请快速发表评论。如果使用bash,则可以使用dotglob shell选项“修复”此问题。我在这里使用了一个子shell,这样它就不会对其他命令全局影响=>(shopt -s dotglob; du -shc *)

#1 楼

在您的主文件夹中使用

du -sch .[!.]* * |sort -h


。或者,我最常使用的命令是

ncdu


如果需要,易于安装:

sudo apt-get install ncdu


评论


谢谢,你是个天才。我不是bash的高手,[!.]怎么办?

–邦森博士
13-10-22在14:43

@Dr_Bunsen:这是一个列出所有以单个..开头的文件的glob。这是一个巧妙的窍门:如果您不知道glob外观是什么,请尝试运行echo。[!。] *或其他方法。然后,外壳程序将扩展glob并将其传递到echo中,打印出结果文件列表。

– Tikhon Jelvis
2014年5月21日在17:46

这样就无法列出名为..foo的文件,并且可能导致名称以-开头的文件出现问题。如果arg列表太长,也可能会失败。 du -ahd1不会有这些问题。

–StéphaneChazelas
15年6月22日在20:08

与原始问题无关,但与日常使用有关:包括'c'开关以显示总计并重新排序选项可能会很有用,以使此命令更容易记住:du -cksh。 [!。] * * | sort -h。

– Daddy32
17年2月21日在13:06

#2 楼

我在coreutils邮件列表中有相同的问题,因为我很难记住@ don.joey发出的奇怪命令。 Bob Proulx提出了更好,更自然的命令:
du -ahd1 | sort -h


如果要列出当前目录中的所有文件,则可以使用'。'。或根本不给它任何文件参数。另外,您
可能要使用-d,--max-depth = N选项。

尝试以下操作:

du -hd1


评论


添加-a选项使其等效。

–StéphaneChazelas
15年6月22日在20:16

这应该是公认的答案,因为它更容易记住和理解。

–巴斯蒂安
2015年9月10日在8:47

#3 楼

当您在目录中运行同一命令时,它不包括以.开头的隐藏文件。例如,如果您安装了Steam,则默认情况下会在~/.local/share/Steam/下安装游戏,并且它本身也已安装在其中。
在bash下,您显然需要运行du -sch .[!.]* *,因为它无法正确扩展.* glob。在zsh或其他shell下,du -sch * .*应该可以工作,因为.*应该扩展为包括当前目录中所有隐藏文件的列表。

评论


好。那么bash显然存在问题,因为它似乎无法正确扩展。*。但是du -sch *。*确实在zsh下做正确的事情。在bash下,du-sch。*似乎很重要。但不会扩展为单独显示文件。

–多贝
13-10-22在13:39

对我来说,*也扩展为../*,因此du退出了我想查看其大小的目录!我不得不改用./.[^.]*。

–阿里
2014-09-19 22:58



是zsh和所有从Forsyth shell(如今主要是pdksh及其派生类)派生的shell,它们在做正确的事情,并且不会扩展。和这里。所有其他类似Bourne的外壳(bash,Bourne,AT&T ksh,破折号,yash ...)都可以。在zsh中,您将使用du -sch-*(D),而不是du -sch-*。*。

–StéphaneChazelas
2015年6月22日在20:11