DU:仅深度显示文件夹


12

我从du -h类似下面的输出:

103M    ./.wine/drive_c/windows/mono/mono-2.0/lib/mono
103M    ./.wine/drive_c/windows/mono/mono-2.0/lib
129M    ./.wine/drive_c/windows/mono/mono-2.0
129M    ./.wine/drive_c/windows/mono
362M    ./.wine/drive_c/windows
545M    ./.wine/drive_c

我只想显示最可行的文件夹 ./.wine/drive_c/windows/mono/mono-2.0/lib/mono

如果子文件夹负责大部分磁盘空间使用,是否可以删除父文件夹?

仅显示叶文件夹的设置可以解决问题,或者在计算父文件夹的大小时从父文件夹减去所有子文件夹的大小的设置。


这通常更容易通过视觉进行跟踪;请参阅如何了解正在占用的空间?
吉尔斯(Gillles)“所以-别再邪恶了”

Answers:


12

如果使用的是GNU du,则可以在计算父级使用量时使用-S--separate-dirs选项不包括子目录的大小。

您的du命令可能不支持此选项。

您可以结合使用这对代码来获取最大的单个目录(假设使用GNU工具):

du --separate-dirs -h . |sort -h

这似乎满足了我查询的“在计算父文件夹的大小时从父文件夹中减去所有子文件夹的大小”的部分,因此可能会接受!我不确定它是否完全满足我的需求(试图找到要删除的最可行的文件夹以便检索空间)
EoghanM 2013年

9

就个人而言,我只是将其与GNU sort的功能结合在一起:

du -ch | sort -h

这将导致尺寸以人类可读格式进行排序。例如:

$ du -h /usr/ | head -20 | sort -h
8.0K    /usr/src/linux-headers-3.2.0-3-common/include/misc
12K /usr/src/linux-headers-3.2.0-3-common/include/drm/i2c
12K /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter/ipv4
16K /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter/ipv6
20K /usr/src/linux-headers-3.2.0-3-common/include/net/phonet
28K /usr/src/linux-headers-3.2.0-3-common/include/acpi/platform
52K /usr/src/linux-headers-3.2.0-3-common/include/net/netns
60K /usr/lib32/libv4l
76K /usr/src/linux-headers-3.2.0-3-common/include/net/caif
96K /usr/src/linux-headers-3.2.0-3-common/include/scsi/fc
108K    /usr/src/linux-headers-3.2.0-3-common/include/net/bluetooth
112K    /usr/src/linux-headers-3.2.0-3-common/include/drm/ttm
148K    /usr/src/linux-headers-3.2.0-3-common/include/net/netfilter
264K    /usr/src/linux-headers-3.2.0-3-common/include/rdma
284K    /usr/src/linux-headers-3.2.0-3-common/include/acpi
596K    /usr/src/linux-headers-3.2.0-3-common/include/drm
608K    /usr/src/linux-headers-3.2.0-3-common/include/scsi
668K    /usr/games
6.3M    /usr/lib32/gconv
8.9M    /usr/lib32

来自man sort

   -h, --human-numeric-sort
          compare human readable numbers (e.g., 2K 1G)

它仍然显示您不在乎的内容,但是现在很容易找到您要做的内容。


不,实际上,这会使情况变得更糟,因为它现在仅显示545M ./.wine/drive_c在文件夹顶部,而没有文件,但它现在显示 在列表的顶部,并且由于在驱动器_c的(递归)子文件夹中没有空间,因此它们变得很难看清不会连续出现在列表中。
EoghanM

6

如果您只是在寻找一个清晰排列的视图,建议您使用该durep包装。

输出示例:

root@dogmeat:~# durep -td 4 -hs 50M /usr/
[ /usr     4.8G (0 files, 9 dirs) ]
   1.9G [###########                   ]  38.57% lib/
     463.6M [#######                       ]  24.46% x86_64-linux-gnu/
         102.3M [######                        ]  22.07% wine/
     276.2M [####                          ]  14.57% i386-linux-gnu/
          96.1M [##########                    ]  34.80% wine/
     222.4M [###                           ]  11.73% libreoffice/
         189.3M [#########################     ]  85.12% program/
     122.6M [#                             ]   6.47% chromium-browser/
          87.6M [#####################         ]  71.46% chromium-browser
      79.5M [#                             ]   4.19% virtualbox/
      79.4M [#                             ]   4.19% jvm/
          73.4M [###########################   ]  92.52% java-7-openjdk-amd64/
              73.4M [############################# ]  99.99% jre/
      75.7M [#                             ]   3.99% python2.7/
          58.4M [#######################       ]  77.21% dist-packages/
      58.9M [                              ]   3.11% firefox/
      52.2M [                              ]   2.75% libwireshark.so.2.0.2
   1.4G [########                      ]  29.56% src/
   1.2G [#######                       ]  26.03% share/
     211.6M [####                          ]  16.54% fonts/
         199.3M [############################  ]  94.18% truetype/
              84.2M [############                  ]  42.23% horai-umefont/
     174.6M [####                          ]  13.64% icons/
          91.5M [###############               ]  52.39% gnome/
              66.4M [#####################         ]  72.60% icon-theme.cache
      77.5M [#                             ]   6.05% gimp/
          77.5M [##############################] 100.00% 2.0/
              66.2M [#########################     ]  85.43% help/
      74.4M [#                             ]   5.82% virtualbox/
          56.9M [######################        ]  76.42% VBoxGuestAdditions.iso
      62.9M [#                             ]   4.91% doc/
 240.1M [#                             ]   4.89% bin/

使用-td参数指定最大深度,使用-hs参数指定最小大小以使文件夹显示在结果中。


2

不太确定这是否是您想要的,但是您可以使用GNU find的剥离父目录-execdir

find . -type d -execdir du -ch "{}" \;

-execdir选项类似于-exec但执行您在find找到文件的子目录中提供的命令。


嗯,这似乎不符合您的描述。我仍然在输出中得到很多父目录。
EoghanM 2013年

2

如果使用du固定深度(例如)du -m -d 2 .,则可以屏蔽掉未达到最大深度的线条,如下所示:

du -m -d 2 . | sort -k1n | awk -F"/" 'NF==3'

在这种情况下,我希望深度为2个目录,因此在开始时指定为我的字段分隔符后,我只保留了3个字段的结果(如awk关键字定义)。NF"/"


0

这些都对我有用:

 du -h | perl -ne '$n=()=$_=~m#/#g;  print unless $n > 2'
 du -h | perl -ne 'print unless ($n=()=$_=~m#/#g) > 2 '

稍加评论,要使数字匹配,匹配项应位于列表上下文中,这就是我们为什么需要()的原因。

du -h | perl的-ne '打印除非(()= $ _ =〜M#/#G)> 2'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.