2009-07-21 06:54:48 +0000 2009-07-21 06:54:48 +0000
134
134

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

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

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

我知道这在KDE3中是可以实现的,但我不希望这样做–首选KDE4或命令行。

答案 (16)

200
200
200
2010-07-07 15:31:29 +0000

我总是用ncdu。它的互动性很强,速度也很快。

131
131
131
2012-03-06 19:56:10 +0000

查找最大的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}

处理名称中带有空格的文件,并在输出中生成人类可读的文件大小。最大的文件列在最后。尾部的参数是你看到的结果数量(这里是最大的10个)。

有两种技术用于处理文件名中的空格。find -print0 | xargs -0使用空定界符代替空格,第二个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
```。
37
37
37
2009-07-21 07:19:02 +0000

为了快速查看。

du | sort -n

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

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

或者,再次避免多余的 * 。

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

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

(-n参数是需要排序的,这样第一个字段就会被排序为数字而不是文本,但是这就排除了对du使用-h参数的可能性,因为我们需要一个显著的数字来进行排序)

如果你想遵循符号链接(默认情况下是不遵循符号链接),或者只是显示不包括子目录在内的目录内容的大小,那么du的其他参数也是可用的。

23
23
23
2009-07-24 04:26:50 +0000

对于大多数事情,我更喜欢CLI工具,但对于驱动器的使用,我真的很喜欢 filelight 。对我来说,它的表现形式比我见过的任何其他空间管理工具都要直观。

20
20
20
2013-02-18 04:35:03 +0000

Filelight对KDE用户来说比较好,但为了完整(问题标题是一般的),我必须提到 Baobab 是包含在Ubuntu中的,也就是磁盘使用分析器。

8
8
8
2009-07-22 10:00:12 +0000

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

我不知道这是否正是你不想要的KDE工具,但我认为在这样的问题中还是应该提到它。它很好,很多人可能不知道–我自己也是最近才知道的。

5
5
5
2009-07-21 07:06:07 +0000

组合总是Unix上最好的技巧。

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

将以KB为单位显示目录大小,并在最后给出最大的排序。
树形视图将然而需要更多的燃料……它真的需要吗?

注意,这个扫描是跨目录嵌套的,所以会对较高的目录再算一次子目录,基础目录.会在最后显示出总的利用率总和。

不过,你可以在find上使用深度控制,以特定的深度进行搜索。
而且,实际上在你的扫描中得到更多的参与……这取决于你想要什么。find的深度控制,-maxdepth-mindepth可以限制在特定的子目录深度。


下面是一个精炼的变体,可以解决你的arg-to-long问题

find . -type d -exec du -sk {} \; | sort -n -k 1
```。
3
3
3
2009-07-21 11:35:45 +0000

我喜欢 gt5 。你可以导航树和打开子目录来钻研更多细节。它使用文本模式的网络浏览器,如 lynx,来显示结果。安装 elinks 以获得最佳效果。

2
2
2
2009-07-21 07:00:04 +0000

虽然它不会给你这样的嵌套输出,但可以尝试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
1
1
2013-05-15 21:52:25 +0000

虽然找到每个文件/目录的磁盘使用百分比是有益的,但大多数时候知道磁盘内最大的文件/目录就足够了。

所以我最喜欢的是这样。

# 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

输出是这样的:

0x1&

1
1
1
2012-09-06 05:27:20 +0000

下面是自动完成这个任务的脚本。 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%***

你可能会发现这个脚本非常方便和有用!

1
1
1
2014-05-29 03:39:47 +0000

查找当前目录及其子目录中的前25个文件。

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

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

1
1
1
2015-04-10 12:07:49 +0000

另一种选择是 agedu ,它按照最后访问时间来分解磁盘空间,这样可以更容易找到浪费空间的文件。

它甚至可以在没有X Windows的服务器上工作,通过提供临时网页,这样就可以远程分析使用情况,并提供图表。假设服务器的 IP 地址是 192.168.1.101,你可以在服务器的命令行中键入以下内容

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

这将打印出用户名、密码和 URL,你可以用它访问 “GUI "并浏览结果。完成后,在服务器上用agedu终止Ctrl+D

0
0
0
2010-07-07 11:05:40 +0000
du -chs /*

将显示根目录的列表。

0
0
0
2013-08-18 12:36:57 +0000

为了使列表更完整一些,我添加了我最喜欢的磁盘使用分析器,它是 xdiskusage

GUI让我想起了其他一些好用的X实用程序,它速度很快,也不臃肿,但你还是可以轻松地在层次结构中导航,并有一些显示选项。

$ xdiskusage /usr

0
0
0
2015-03-05 13:44:05 +0000

试试下面的单行命令(显示当前目录下最大的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),你需要从sort安装coreutils

所以这些别名在你的 rc 文件中是很有用的 (每次当你需要的时候):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'
``` 。