什么是命令行方式来查找要删除的大文件/目录并释放空间?

寻找一系列命令,向我展示驱动器上最大的文件。

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

 find / -size +10M -ls 

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

 find / -size +10M -size -12M -ls 

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

从包装说明:

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

gt5的屏幕截图

ncdu的“相关包”部分,我找到了ncdu 。 从其包装说明:

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

ncdu的屏幕截图

我只是使用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 

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

注意:我使用du-x标志来限制一个文件系统(我在SSD和RAID5之间安装了相当复杂的交叉安装)。

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

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

 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 

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

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

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

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

 du -ah . | sort -rh | head -20 

或者(更多面向Unix):

 du -a . | sort -rn | head -20 

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

 ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20 

或者具有人类可读的尺寸:

 ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20 

请注意-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' 

这似乎是find的完美应用程序:

 find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5 

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

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

当我需要在服务器上创建更多可用空间时,我使用此命令。 它找到大于50 MB的所有文件,并且“du -h”制作更好的文件列表,并在管道制作列表numericcaly按文件大小排序后“排序-n”。

 find / -size +50M -type f -exec du -h {} \; | sort -n 

尝试Baobab,它为您提供文件和文件夹的图形概览,您可以看到真正的空间占用的位置,并通过一次单击删除它们https://help.ubuntu.com/community/Baobab

例如,要查找所有GB文件,我会使用du和grep,尽管这里提到的其他方法看起来也很棒。

 du -h -a /dir | grep "[0-9]G\b" 

您还可以使用du具有的–except选项。

您还可以按大小对文件进行排序:

 find . -type f -exec du -h {} \; | sort -k1 -h 

它只找到文件并为每个文件执行du -h ,它显示文件的大小。 最后,我们根据第一列(人类可读格式)对find / du的输出进行排序。

最后打印的文件是最大的文件。