什么是命令行方式来查找要删除的大文件/目录并释放空间?
寻找一系列命令,向我展示驱动器上最大的文件。
如果只需要查找大文件,可以使用带-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等),可以导航和升级到目录。
在ncdu
的“相关包”部分,我找到了ncdu
。 从其包装说明:
Ncdu是一个基于ncurses的du viewer。 它通过着名的du实用程序提供快速且易于使用的界面。 它允许浏览目录并显示使用ncurses库的磁盘使用百分比。
我只是使用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
将任何错误消息重定向到遗忘。 如果他们不打扰你,那不是强制性的。
我最喜欢的解决方案使用了其中几个好答案的混合。
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
仅适用于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'
这似乎是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
的输出进行排序。
最后打印的文件是最大的文件。