用于查找最大文件/目录的Linux实用程序


134

我正在寻找一个程序来显示哪些文件/目录占用了最多的空间,例如:

74% music
 \- 60% music1
 \- 14% music2
12% code
13% other

我知道在KDE3中是可能的,但我宁愿不要这样做-首选KDE4或命令行。


对于Mac用户,我只想推荐这个名为Disk Inventory X的免费软件。在此处下载它derlien.com对于Mac osx来说很容易使用
Nimitack '18

Answers:


131

要查找最大的10个文件(linux / bash):

find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

要查找最大的10个目录:

find . -type d -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

唯一的区别是-type {d:f}

处理名称中带有空格的文件,并在输出中产生可读的文件大小。最后列出的最大文件。tail的参数是您看到的结果数(此处为10个最大值)。

有两种技术用于处理文件名中的空格。在find -print0 | xargs -0使用null作为分隔符代替空格,第二个xargs -I{}使用换行符而不是空格终止输入项目。

例:

$ find . -type f -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

  76M    ./snapshots/projects/weekly.1/onthisday/onthisday.tar.gz
  76M    ./snapshots/projects/weekly.2/onthisday/onthisday.tar.gz
  76M    ./snapshots/projects/weekly.3/onthisday/onthisday.tar.gz
  76M    ./tmp/projects/onthisday/onthisday.tar.gz
  114M   ./Dropbox/snapshots/weekly.tgz
  114M   ./Dropbox/snapshots/daily.tgz
  114M   ./Dropbox/snapshots/monthly.tgz
  117M   ./Calibre Library/Robert Martin/cc.mobi
  159M   ./.local/share/Trash/files/funky chicken.mpg
  346M   ./Downloads/The Walking Dead S02E02 ... (dutch subs nl).avi

首先列出的最大文件:(find . -type f -print0 | xargs -0 du | sort -nr | head -10 | cut -f2 | xargs -I{} du -sh {}即,使用sort -nr | head -10代替sort -n | tail -10
Sandra Rossi

200

我总是用ncdu。它是交互式的,非常快。


是的,它很小!
卢克·史丹利

5
我爱ncdu。这是我最喜欢的google发现的内容之一。
罗布

5
哇。我怎么不知道这个存在。谢谢!
像素

22
+1000 ncdu---就像htop磁盘空间一样。超级有用!
诺亚·萨斯曼

由于似乎没有标志或.config选项,因此,如果您希望查看文件和文件夹的混合以及相对百分比统计信息,可以在每次运行它时键入以下键序列:[t] [g] [g]
rymo

37

快速浏览:

du | sort -n

列出最后一个最大的所有目录。

du --max-depth=1 * | sort -n

或者再次避免多余的*:

du --max-depth=1 | sort -n

列出当前目录中最后一个最大的所有目录。

(需要使用-n参数进行排序,以便第一个字段按数字而不是文本进行排序,但这排除了使用-h参数对du进行排序,因为我们需要有效的数字进行排序)

例如,如果要跟随符号链接(默认不跟随符号链接)或仅显示目录内容的大小(不包括子目录),则du的其他参数可用。du甚至可以在列表中包含上次更改目录中任何文件的日期和时间。


3
*确实是必需的。默认情况下,它是否不包括当前目录中的所有文件?
乔什·亨特

不,*应该是多余的。我不确定使用它是好习惯还是坏习惯的标志。感谢您指出。我修改了答案以将其反映为可选。
马斯

很好,但是结果不是很友好。我通常会转向:find {/path/to/directory} -type f -size +{file-size-in-kb}k -exec ls -lh {} \; | awk '{ print $8 ": " $5 }'
deed02392 2012年

罗马#du --max-depth = 1 | sort -n du:非法选项--用法:du [-A] [-H | -L | -P] [-a | -s | -d深度] [-c] [-l] [-h | -k | -m | -B bsize] [-n] [-x] [-I mask] [file ...]
holms 2012年

du -h --max-depth=1 2>/dev/null | sort -nr | grep -v ^0-有点
讲究

23

对于大多数事情,我更喜欢CLI工具,但是对于驱动器的使用,我真的很喜欢filelight。与我见过的任何其他空间管理工具相比,该演示文稿对我来说都更直观。

Filelight屏幕截图


1
Filelight是我选择的节省空间的工具。
瑞安·汤普森

很好的应用程序。+1
rpax

在视觉上,这在艺术上很有趣,但是直观吗?单看它,我不知道它代表什么。有人可以解释吗?我去了网站,没有任何解释。
G-Man

在Mac上,类似的工具是DaisyDisk,可在daisydiskapp.com上使用
computingfreak


8

GUI工具KDirStat可以表形式和图形形式显示数据。您可以很快地看到大部分空间被使用的地方。

在此处输入图片说明

我不确定这是否正是您不想要的KDE工具,但我认为仍然应该在这样的问题中提及它。很好,很多人可能都不知道-我最近才才了解这一点。


感谢您的回答。这是确切相同的工具我在KDE3,但我搬到了KDE 4
罗伯特·蒙特亚努

您确定不能为KDE4获取kdirstat吗?
约尼克,

4
Kdirstat太慢了。使用ncdu代替。
2010年

我只是按ctrl + f来找到ncdu,然后看到我已经对@Daenyth进行了投票
Rob

在KDE上,它简称为k4dirstat
phihag 2014年

5

在Unix上,组合永远是最好的技巧。

du -sk $(find . -type d) | sort -n -k 1

将以KB为单位显示目录大小,并在最后排序以给出最大的目录大小。
但是,树视图还需要更多...真的需要吗?

请注意,此扫描是嵌套在目录之间的,因此它将对较高目录的子目录再次计数,并且基本目录.最终将显示为总利用率之和。

但是,您可以在查找结果上使用深度控件以特定深度进行搜索。
而且,实际上取决于您的扫描,更多地涉及到扫描。深度控制find-maxdepth-mindepth可以限制到特定的子目录深度。


这是您的arg-to-long问题的精确变体

find . -type d -exec du -sk {} \; |  sort -n -k 1

我尝试了一下,然后得到很多“ du:任务:没有这样的文件或目录”
Josh Hunt

感谢您的回答。不幸的是,我受到重击:/ usr / bin / du:参数列表过长
Robert Munteanu

3

我喜欢gt5。您可以导航树并打开子目录以进行向下钻取以获取更多详细信息。它使用文本模式的Web浏览器(例如lynx)来显示结果。安装elink以获得最佳效果。

替代文字


2

尽管它没有像这样的嵌套输出,请尝试 du

du -h /path/to/dir/

在我的Documents文件夹上运行该命令会弹出以下内容:

josh-hunts-macbook:Documents joshhunt$ du -h
  0B    ./Adobe Scripts
  0B    ./Colloquy Transcripts
 23M    ./Electronic Arts/The Sims 3/Custom Music
  0B    ./Electronic Arts/The Sims 3/InstalledWorlds
364K    ./Electronic Arts/The Sims 3/Library
 77M    ./Electronic Arts/The Sims 3/Recorded Videos
101M    ./Electronic Arts/The Sims 3/Saves
 40M    ./Electronic Arts/The Sims 3/Screenshots
1.6M    ./Electronic Arts/The Sims 3/Thumbnails
387M    ./Electronic Arts/The Sims 3
387M    ./Electronic Arts
984K    ./English Advanced/Documents
1.8M    ./English Advanced
  0B    ./English Extension/Documents
212K    ./English Extension
100K    ./English Tutoring
5.6M    ./IPT/Multimedia Assessment Task
720K    ./IPT/Transaction Processing Systems
8.6M    ./IPT
1.5M    ./Job
432K    ./Legal Studies/Crime
8.0K    ./Legal Studies/Documents
144K    ./Legal Studies/Family/PDFs
692K    ./Legal Studies/Family
1.1M    ./Legal Studies
380K    ./Maths/Assessment Task 1
388K    ./Maths
[...]

然后,您可以通过将输出通过管道传递到 sort

du /path/to/dir | sort -n

谢谢,但是它不能正确显示哪些目录最大。如果我在主目录中启动它,则输出将不可用。
罗伯特·蒙提亚努

1

这是自动为您执行的脚本。

http://www.thegeekscope.com/linux-script-to-find-largest-files/

以下是脚本的示例输出:

**# sh get_largest_files.sh / 5**

[SIZE (BYTES)]     [% OF DISK] [OWNER]         [LAST MODIFIED ON]        [FILE] 

56421808           0%           root           2012-08-02 14:58:51       /usr/lib/locale/locale-archive
32464076           0%           root           2008-09-18 18:06:28       /usr/lib/libgcj.so.7rh.0.0
29147136           0%           root           2012-08-02 15:17:40       /var/lib/rpm/Packages
20278904           0%           root           2008-12-09 13:57:01       /usr/lib/xulrunner-1.9/libxul.so
16001944           0%           root           2012-08-02 15:02:36       /etc/selinux/targeted/modules/active/base.linked

Total disk size: 23792652288 Bytes
Total size occupied by these files: 154313868 Bytes  [ 0% of Total Disc Space  ]

*** Note: 0% represents less than 1% ***

您可能会发现此脚本非常方便且有用!


2
虽然链接的网站确实提供了说明,但是您最好改述然后引用外部网站(无论如何,它看起来像个人博客)。这将防止链接腐烂,并帮助此站点上的
Canadian Luke

1
链接坏了吗?
Danijel 2015年

1

尽管找到每个文件/目录的磁盘使用百分比是有益的,但是大多数时候了解磁盘中最大的文件/目录就足够了。

所以我最喜欢的是:

# du -a | sort -n -r | head -n 20

输出是这样的:

28626644        .
28052128        ./www
28044812        ./www/vhosts
28017860        ./www/vhosts/example.com
23317776        ./www/vhosts/example.com/httpdocs
23295012        ./www/vhosts/example.com/httpdocs/myfolder
23271868        ./www/vhosts/example.com/httpdocs/myfolder/temp
11619576        ./www/vhosts/example.com/httpdocs/myfolder/temp/main
11590700        ./www/vhosts/example.com/httpdocs/myfolder/temp/main/user
11564748        ./www/vhosts/example.com/httpdocs/myfolder/temp/others
4699852         ./www/vhosts/example.com/stats
4479728         ./www/vhosts/example.com/stats/logs
4437900         ./www/vhosts/example.com/stats/logs/access_log.processed
401848          ./lib
323432          ./lib/mysql
246828          ./lib/mysql/mydatabase
215680          ./www/vhosts/example.com/stats/webstat
182364          ./www/vhosts/example.com/httpdocs/tmp/aaa.sql
181304          ./www/vhosts/example.com/httpdocs/tmp/bbb.sql
181144          ./www/vhosts/example.com/httpdocs/tmp/ccc.sql

1

要在当前目录及其子目录中找到前25个文件,请执行以下操作:

find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25

会通过“ sort -nr -k5”管道命令根据文件的大小排序,输出前25个文件。


1

另一个选择是agedu,它按最后访问时间分解磁盘空间,这使查找浪费空间的文件更容易。

通过提供临时网页,它甚至可以在没有X Windows的服务器上运行,因此可以使用图表远程分析使用情况。假设服务器的IP地址为192.168.1.101,则可以在服务器的命令行上键入此地址

agedu -s / -w --address 192.168.1.101:60870 --auth basic -R

这会打印用户名,密码和URL,您可以使用它们访问“ GUI”并浏览结果。完成后,终止ageduCtrl+D服务器上。



0

为了使列表更加完整,我添加了我最喜欢的磁盘使用情况分析器xdiskusage

GUI使我想起了其他一些出色的X实用程序,它非常快捷,而且不会肿,但是您仍然可以轻松地在层次结构中导航并具有一些显示选项:

$ xdiskusage /usr

在此处输入图片说明


0

尝试以下单行代码(在当前目录中显示前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

第二个命令对OSX / BSD正常工作(因为sort没有-h),你需要安装sortcoreutils

因此,这些别名对于在rc文件中使用很有用(每次需要时):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.