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的“相关包”部分,我找到了ncdu. 从它的包装说明:
Ncdu 是一个基于 ncurses 的 du 查看器。它通过著名的 du 实用程序提供快速且易于使用的界面。它允许浏览目录并使用 ncurses 库显示磁盘使用百分比。

小智 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)
Oli*_*Oli 37
我只是用的组合du和sort。
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仅适用于 GNUsort,因此要使其在 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
这似乎是以下方面的完美应用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) 的文件。
类似问题的答案中提到的一个很棒的、用户友好的工具是NCurses Disk Usagetool:
sudo ncdu /
Run Code Online (Sandbox Code Playgroud)
当我需要在服务器上腾出更多可用空间时,我会使用此命令。它发现所有大于 50 MB 的文件和“du -h”制作更好的文件列表,并在管道制作列表按文件大小数字排序后“排序 -n”。
find / -size +50M -type f -exec du -h {} \; | sort -n
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
371148 次 |
| 最近记录: |