用于查找最大文件/目录的Linux实用程序
我正在寻找一个程序来显示哪些文件/目录占用了最多的空间,比如说
74% music
\- 60% music1
\- 14% music2
12% code
13% other
我知道这在KDE3中是可以实现的,但我不希望这样做–首选KDE4或命令行。
我正在寻找一个程序来显示哪些文件/目录占用了最多的空间,比如说
74% music
\- 60% music1
\- 14% music2
12% code
13% other
我知道这在KDE3中是可以实现的,但我不希望这样做–首选KDE4或命令行。
查找最大的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
```。
对于大多数事情,我更喜欢CLI工具,但对于驱动器的使用,我真的很喜欢 filelight 。对我来说,它的表现形式比我见过的任何其他空间管理工具都要直观。
Filelight对KDE用户来说比较好,但为了完整(问题标题是一般的),我必须提到 Baobab 是包含在Ubuntu中的,也就是磁盘使用分析器。
组合总是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
```。
我喜欢 gt5 。你可以导航树和打开子目录来钻研更多细节。它使用文本模式的网络浏览器,如 lynx,来显示结果。安装 elinks 以获得最佳效果。
虽然它不会给你这样的嵌套输出,但可以尝试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
```。
虽然找到每个文件/目录的磁盘使用百分比是有益的,但大多数时候知道磁盘内最大的文件/目录就足够了。
所以我最喜欢的是这样。
# 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&
下面是自动完成这个任务的脚本。 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%***
你可能会发现这个脚本非常方便和有用!
另一种选择是 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
。
为了使列表更完整一些,我添加了我最喜欢的磁盘使用分析器,它是 xdiskusage
。
GUI让我想起了其他一些好用的X实用程序,它速度很快,也不臃肿,但你还是可以轻松地在层次结构中导航,并有一些显示选项。
$ xdiskusage /usr
试试下面的单行命令(显示当前目录下最大的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'
``` 。