![使用什么命令行方式可以查找要删除并释放空间的大文件/目录?](https://linux22.com/image/920815/%E4%BD%BF%E7%94%A8%E4%BB%80%E4%B9%88%E5%91%BD%E4%BB%A4%E8%A1%8C%E6%96%B9%E5%BC%8F%E5%8F%AF%E4%BB%A5%E6%9F%A5%E6%89%BE%E8%A6%81%E5%88%A0%E9%99%A4%E5%B9%B6%E9%87%8A%E6%94%BE%E7%A9%BA%E9%97%B4%E7%9A%84%E5%A4%A7%E6%96%87%E4%BB%B6%2F%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
寻找一系列可以显示驱动器上最大文件的命令。
答案1
如果您只需要查找大文件,可以使用find
该-size
选项。下一个命令将列出所有大于 10MiB 的文件(不要与 10MB 混淆):
find / -size +10M -ls
如果要查找介于特定大小之间的文件,可以将其与“小于”搜索结合使用。下一个命令查找介于 10MiB 和 12MiB 之间的文件:
find / -size +10M -size -12M -ls
apt-cache search 'disk usage'
列出了一些可用于磁盘使用情况分析的程序。其中一个看起来很有前途的应用程序是gt5
。
从包装描述来看:
多年来,磁盘变得越来越大,但即使在这个令人难以置信的巨大硬盘时代,空间似乎也会随着时间的推移而消失。这个小而有效的程序提供了比默认的 du(1) 更方便的列表。它显示自上次运行以来发生的情况,并显示目录大小和总百分比。可以使用基于文本的浏览器(links、elinks、lynx 等)使用光标键导航和上升到目录。
在“相关软件包”部分GT5,我发现了ncdu
。从其包装描述来看:
Ncdu 是一个基于 ncurses 的 du 查看器。它通过著名的 du 实用程序提供快速且易于使用的界面。它允许浏览目录并使用 ncurses 库显示磁盘使用率百分比。
答案2
我最喜欢的解决方案是结合这些好的答案。
du -aBM 2>/dev/null | sort -nr | head -n 50 | more
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
答案3
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
那么这就是冲洗并重复。找到您认为太大的子目录,对它们运行命令,然后您就会找出问题的原因。
注意:我使用du
的-x
标志将事物限制在一个文件系统(我在 SSD 和 RAID5 之间进行了相当复杂的交叉安装)。
注 2:2>/dev/null
将所有错误消息重定向到遗忘位置。如果它们不打扰您,则这不是必须的。
答案4
qbi 的答案是正确的,但是当文件很多时它会非常慢,因为它会为每个项目启动一个新的 ls 进程。
使用 find 而不产生子进程的更快版本是使用 printf 打印字节大小(%s)和路径(%p)
find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries