Lek*_*eyn 343

如果您只需要查找大文件,则可以使用find-size选项。下一个命令将列出所有大于 10MiB 的文件(不要与 10MB 混淆):

find / -size +10M -ls
Run Code Online (Sandbox Code Playgroud)

如果要查找特定大小之间的文件,可以将其与“小于”搜索结合使用。下一个命令查找 10MiB 和 12MiB 之间的文件:

find / -size +10M -size -12M -ls
Run Code Online (Sandbox Code Playgroud)

apt-cache search 'disk usage'列出了一些可用于磁盘使用情况分析的程序。一种看起来很有前途的应用程序是gt5.

从包描述:

多年过去了,磁盘变得越来越大,但即使在这个无比庞大的硬盘时代,空间似乎也随着时间的流逝而消失。这个小而有效的程序提供了比默认的 du(1) 更方便的列表。它显示自上次运行以来发生的事情,并显示目录大小和总百分比。可以在基于文本的浏览器(链接、elinks、lynx 等)中使用光标键来导航和上升到目录。

gt5截图

gt5的“相关包”部分,我找到了ncdu. 从它的包装说明:

Ncdu 是一个基于 ncurses 的 du 查看器。它通过著名的 du 实用程序提供快速且易于使用的界面。它允许浏览目录并使用 ncurses 库显示磁盘使用百分比。

ncdu的截图

  • 天哪,ncdu 太棒了,感谢您分享您的发现! (13认同)
  • ncdu 非常快,正是我所需要的,谢谢!我也尝试过 gt5,但只是取消了它,因为它“思考”了太久而没有任何反馈 (4认同)
  • 如果 **ncdu** 被指出更强,我会很高兴。我偶尔需要它,但我不记得名字了。 (3认同)
  • @matt 不,`-ls` 输出的输出格式是硬编码的(请参阅 [`pred_fls`](https://git.savannah.gnu.org/cgit/findutils.git/tree/find/ pred.c?h=v4.7.0#n443) 和 [list_file](https://git.savannah.gnu.org/cgit/findutils.git/tree/lib/listfile.c?h=v4.7.0#n304 ) 职能)。您可以尝试使用 `-printf` 选项近似输出,使用 awk 对输出进行后处理,或者使用类似 `find ... -type f -exec ls -ldh {} \; | 列-t` (2认同)

小智 45

我最喜欢的解决方案混合了其中几个好的答案。

du -aBM 2>/dev/null | sort -nr | head -n 50 | more
Run Code Online (Sandbox Code Playgroud)

du 论据:

  • -a对于“所有”文件和目录。只为目录保留它
  • -BM 以兆字节 (M) 块大小 (B) 输出大小
  • 2>/dev/null - 排除“权限被拒绝”错误消息(感谢@Oli)

sort 论据:

  • -n 对于“数字”
  • -r 用于“反向”(从大到小)

head 论据:

  • -n 50 对于前 50 名的结果。
  • more如果使用较小的数字,请停止

注意:前缀sudo为包含您的帐户无权访问的目录。

示例显示 /var 中前 10 个最大的文件和目录(包括总计)。

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache
Run Code Online (Sandbox Code Playgroud)

  • Tanx 适用于该企业解决方案。我只想通过在运行命令之前添加 'cd /' 来完成此操作: 'cd /;sudo du -aBM 2>/dev/null | 排序-nr | head -n 10 > sizelog.txt' (2认同)

Oli*_*Oli 37

我只是用的组合dusort

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home
Run Code Online (Sandbox Code Playgroud)

然后是冲洗和重复的情况。定位您认为太大的子目录,为它们运行命令,然后您就会找出导致问题的原因。

注意:我使用du's-x标志将事情限制在一个文件系统(我在 SSD 和 RAID5 之间交叉安装的东西的安排相当复杂)。

注 2:2>/dev/null将任何错误消息重定向到遗忘中。如果他们不打扰你,那不是强制性的。


ken*_*orb 17

要显示当前文件夹中最大的前 20 个目录(递归),请使用以下单行:

du -ah . | sort -rh | head -20
Run Code Online (Sandbox Code Playgroud)

或(更面向 Unix):

du -a . | sort -rn | head -20
Run Code Online (Sandbox Code Playgroud)

对于当前目录中的前 20 个最大文件(递归):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20
Run Code Online (Sandbox Code Playgroud)

或人类可读的尺寸:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20
Run Code Online (Sandbox Code Playgroud)

请注意,它-h仅适用于 GNU sort,因此要使其在 OSX/BSD 上正常工作,您必须从coreutils. 然后将其文件夹添加到您的PATH.

所以这些别名在你的rc文件中很有用(每次你需要的时候):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
Run Code Online (Sandbox Code Playgroud)


小智 10

qbi 的答案是正确的,但是当有很多文件时它会非常慢,因为它会为每个项目启动一个新的 ls 进程。

使用 find 而不产生子进程的更快版本是使用 printf 打印以字节为单位的大小 (%s) 和路径 (%p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries


qbi*_*qbi 9

这似乎是以下方面的完美应用find

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
Run Code Online (Sandbox Code Playgroud)

此命令将查找目录中的所有文件$DIRECTORY并对其执行ls -s。最后一个命令打印文件的分配大小加上文件名。结果按数字排序,并显示最后五个条目。因此,您将看到最大的 5 个文件$DIRETORY或任何子目录。如果您输入,tail -n 1您将只看到最大的文件。

此外,您可以使用find. 例如,您可以查找小于n天 ( -ctime -n) 或属于特殊用户 ( -user johndoe) 的文件。


jan*_*ide 6

类似问题的答案中提到的一个很棒的、用户友好的工具是NCurses Disk Usagetool:

sudo ncdu /
Run Code Online (Sandbox Code Playgroud)


zor*_*.cz 5

当我需要在服务器上腾出更多可用空间时,我会使用此命令。它发现所有大于 50 MB 的文件和“du -h”制作更好的文件列表,并在管道制作列表按文件大小数字排序后“排序 -n”。

find / -size +50M -type f -exec du -h {} \; | sort -n
Run Code Online (Sandbox Code Playgroud)