linux查询文件夹大小并排序

2016-08-16 15:55:32 classicer 阅读数 9793

今天有如题的需求,但是光靠du命令似乎实现不了,于是查了下,最后使用du和sort组合完成需求,大家有更好的方法快点告诉我啊~

命令格式:

du [选项][文件]

命令功能:

显示每个文件和目录的磁盘使用空间。

命令参数:

-a或-all  显示目录中个别文件的大小。   

-b或-bytes  显示目录或文件大小时,以byte为单位。   

-c或--total  除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。 

-k或--kilobytes  以KB(1024bytes)为单位输出。

-m或--megabytes  以MB为单位输出。   

-s或--summarize  仅显示总计,只列出最后加总的值。

-h或--human-readable  以K,M,G为单位,提高信息的可读性。

-x或--one-file-xystem  以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。 

-L<符号链接>或--dereference<符号链接> 显示选项中所指定符号链接的源文件大小。   

-S或--separate-dirs   显示个别目录的大小时,并不含其子目录的大小。 

-X<文件>或--exclude-from=<文件>  在<文件>指定目录或文件。   

--exclude=<目录或文件>         略过指定的目录或文件。    

-D或--dereference-args   显示指定符号链接的源文件大小。   

-H或--si  与-h参数相同,但是K,M,G是以1000为换算单位。   

-l或--count-links   重复计算硬件链接的文件。 


1、使用du之后得到如下结果:

du -h --time --max-depth=1 .

输出当前目录的文件夹大小并显示时间:



接着需要对时间进行排序,很自然想到管道:

管道符号,是unix一个很强大的功能,符号为一条竖线:"|"。
用法: command 1 | command 2 他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2
接着使用管道把du的结果交给sort排序

sort命令总结

功能:排序
语法:sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]

参数:
  -b   忽略每行前面开始出的空格字符。
  -d   排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  -f   排序时,将小写字母视为大写字母。
  -i   排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  -c   检查文件是否已经按照顺序排序。
  -m   将几个排序好的文件进行合并。
  -M  前面3个字母依照月份的缩写进行排序。
  -n   依照数值的大小排序。
  -o<输出文件>   将排序后的结果存入指定的文件。
  -r   以相反的顺序来排序。
  -t<分隔字符>   指定排序时所用的栏位分隔字符。
  -k 指定域
  --help   显示帮助。
  --version   显示版本信息。


2、命令组合如下:

du -h --time --max-depth=1 . |grep 'M'| sort -r -t $'\t' -k 2

其中grep 'M'是只取出M级别的文件夹进行排序,

sort中-t之后的$'\t'是指使用tab键分割字符串,-k 2 指按照分割后的第二列字符串来排序:











2017-05-02 10:58:28 babymouse1212 阅读数 1198
Linux 某个目录下的文件按大小排序

  1. du -s /usr/* | sort -n

     或du -s /usr/* | sort -n

  这是按字节从小到大排序

  2. du -sh /usr/* | sort -rn

  按K,M,G 来排序,按数字大小来排序,16G<17K

  3.选出排在前面的最小的10个

  du -s /usr/* | sort -rn | head

  4.选出排在后面的最大的10个

  du -s /usr/* | sort -rn | tail

  

 

说明:/usr/*也可以改成你想到达的任何目录

  如/usr/local/zhou/resin 这个目录就可以写成

  /usr/local/zhou/resin/*

 

    或者用下面的,按字节排序

    du --max-depth=1

2017-04-17 21:44:57 justdoithai 阅读数 123565

场景:在sts中执行自动部署时候maven提示No space left on device错误,后来经检查发现是磁盘空间满了,用下面的方法分析发现tomcat下面的logs目录占用了很大的空间,删除多余的日志问题解决!

1 Linux下查看文件和文件夹大小

当磁盘大小超过标准时会有报警提示,这时如果掌握df和du命令是非常明智的选择。

 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点,但对文件却无能为力。

 du可以查看文件及文件夹的大小。

  两者配合使用,非常有效。比如用df查看哪个一级目录过大,然后用df查看文件夹或文件的大小,如此便可迅速确定症结。

  下面分别简要介绍

1.1 df命令

//可以用来查看分区的文件系统
df -T

 

 df命令可以显示目前所有文件系统的可用空间及使用情形,请看下列这个例子:

df -h

 

    参数 -h 表示使用「Human-readable」的输出,也就是在档案系统大小使用 GB、MB 等易读的格式。

    上面的命令输出的第一个字段(Filesystem)及最后一个字段(Mounted on)分别是档案系统及其挂入点。我们可以看到 /dev/sda1 这个分割区被挂在根目录下。

    接下来的四个字段 Size、Used、Avail、及 Use% 分别是该分割区的容量、已使用的大小、剩下的大小、及使用的百分比。 FreeBSD下,当硬盘容量已满时,您可能会看到已使用的百分比超过 100%,因为 FreeBSD 会留一些空间给 root,让 root 在档案系统满时,还是可以写东西到该档案系统中,以进行管理。

1.2 du命令   

ps:实战经验,两者配合使用

复制代码
//查看系统中文件的使用情况
df -h
//查看当前目录下各个文件及目录占用空间大小
du -sh *

//方法一:切换到要删除的目录,删除目录下的所有文件
rm -f *

//方法二:删除logs文件夹下的所有文件,而不删除文件夹本身
rm -rf log/*
复制代码

 

下面的删除方式暂未尝试。

ls *.log | xargs rm -f

 

 

 

 du:查询文件或文件夹的磁盘使用空间

    如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间。这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数,参数:--max-depth=,这是个极为有用的参数!

如下,注意使用“*”,可以得到文件的使用空间大小.

    提醒:一向命令比linux复杂的FreeBSD,它的du命令指定深入目录的层数却是比linux简化,为 -d。

 

du -h --max-depth=1 /home

 

下面的命令与上面的命令有什么异同??

答:du -h --max-depth=1 /home仅列出home目录下面所有的一级目录文件大小;

du -h --max-depth=1 /home/* 列出home下面所有一级目录的一级目录文件大小。
du -h --max-depth=1 /home/*

1.3 du与df差异

接到报警,Linux空间使用率>95%

复制代码
[root@www.linuxidc.com]# df -k

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/cciss/c0d0p2 10080520 9112968 455484 96% /

none 1977584 0 1977584 0% /dev/shm

/dev/cciss/c0d0p5 28842748 6706924 20670700 25% /u01

/dev/cciss/c0d0p6 26850172 683148 24803108 3% /u02
复制代码

但是使用du -kxs 检查,根目录使用率是80%

du 统计文件大小相加

df统计数据块使用情况

如果有一个进程在打开一个大文件的时候,这个大文件直接被rm 或者mv掉,则du会更新统计数值,df不会更新统计数值,还是认为空间没有释放。直到这个打开大文件的进程被Kill掉。

我们碰到的问题是,我们在定期删除 /var/spool/clientmqueue下面的文件,但是没有杀掉其进程,所以空间一直没有释放。

使用下面的命令杀掉进程之后,系统恢复。

fuser -u /var/spool/clientmqueue

1.4 查看linux文件目录的大小和文件夹包含的文件数

    统计总数大小

    du -sh xmldb/

    du -sm * | sort -n //统计当前目录大小 并安大小 排序

    du -sk * | sort -n

    du -sk * | grep guojf //看一个人的大小

    du -m | cut -d "/" -f 2 //看第二个/ 字符前的文字

    查看此文件夹有多少文件 /*/*/* 有多少文件

    du xmldb/

    du xmldb/*/*/* |wc -l

    40752

    解释:

    wc [-lmw]

    参数说明:

    -l :多少行

    -m:多少字符

    -w:多少字

1.5 Linux:ls以K、M、G为单位查看文件大小

ps:注意man命令的使用,按“q”键可以退出man查询。

复制代码
#man ls

……

-h, --human-readable

                print sizes in human readable format (e.g., 1K 234M 2G)

……

# ls

cuss.war    nohup.out

# ls -l

total 30372

-rw-r--r--    1 root root 31051909 May 24 10:07 cuss.war

-rw-------    1 root root          0 Mar 20 13:52 nohup.out

# ls -lh

total 30M

-rw-r--r--    1 root root 30M May 24 10:07 cuss.war

-rw-------    1 root root     0 Mar 20 13:52 nohup.out

# ll -h

total 30M

-rw-r--r--    1 root root 30M May 24 10:07 cuss.war

-rw-------    1 root root     0 Mar 20 13:52 nohup.out
复制代码

  

2 删除系统日志等

删除生成 core,mbox等文件

#find / -name core|xargs rm –rf

删除日志

#rm -rf /var/log/*

 


转自:http://www.cnblogs.com/lixuwu/p/5944062.html

2019-04-24 17:53:18 hanruiding 阅读数 4235

一、du命令

1、du排序

  • 按字节排序,按兆(M)加参数 ‘h’
du -s /usr/* | sort -rn   从大到小

du -s /usr/* | sort -n    从小到大
  • 选择部分列出
du -s /usr/* | sort -rn | head     前面的10个

du -s /usr/* | sort -rn | tail     后面的10个

2、du常用命令

  • du 參数:
    -a或-all显示每一个文件磁盘使用情况
    -b或-bytes 显示文件夹或文件大小时,以byte为单位。
    -c或–total 除了显示文件夹或文件的大小外,也显示全部文件夹或文件的总和。
    -D或–dereference-args 显示指定符号连接的源文件大小。
    -h或–human-readable 以K,M,G为单位,提高信息的可读性。
    -H或–si 与-h类似,可是K,M,G是以1000为换算单位,而不是以1024为换算单位。
    -k或–kilobytes 以1024 bytes为单位。
    -l或–count-links 反复计算硬件连接的文件。
    -L<符号连接>或–dereference<符号连接> 显示选项中所指定符号连接的源文件大小。
    -m或–megabytes 以1MB为单位。
    -s或–summarize 仅显示总计,即当前文件夹的大小。
    -S或–separate-dirs 显示每一个文件夹的大小时,并不含其子文件夹的大小。
    -x或–one-file-xystem 以开始处理时的文件系统为准,其它不同的文件系统文件夹略过。
    -X<文件>或–exclude-from=<文件> 在<文件>指定文件夹或文件。
    –exclude=<文件夹或文件> 略过指定的文件夹或文件。
    –max-depth=<文件夹层数> 超过指定层数的文件夹后,予以忽略。
    –help 显示帮助。
    –version 显示版本号信息。

  • linux中的du常用命令:

显示一个文件夹树及其每一个子树的磁盘使用情况

du /home/linux

显示一个文件夹树及其每一个子树的磁盘使用情况

du -k /home/linux      以KB为单位
du -m /home/linux      以MB为单位
du -g /home/linux      以GB为单位

查看当前文件夹下全部文件夹以及子文件夹的大小:

du -h .                “.”代表当前文件夹下

查看当前文件夹下user文件夹的大小,并不想看其它文件夹以及其子文件夹:

du -sh user
du -h --max-depth=0 user
--max-depth=n表示仅仅深入到第n层文件夹,此处设置为0,即表示不深入到子文件夹。

列出user文件夹及其子文件夹下全部文件夹和文件的大小:

du -ah user      -a表示包含文件夹和文件

列出当前文件夹中的文件夹名不包含xyz字符串的文件夹的大小:

du -h –exclude='*xyz*'

在一个屏幕下列出关于user文件夹及子文件夹大小的信息:

du -0h user
-0 表示每列出一个文件夹的信息,不换行,而是直接输出下一个文件夹的信息。

仅显示一个文件夹树的全部磁盘使用情况

du -s /home/linux

查找上G和T的目录并排序

du -h --max-depth=1 |grep [TG] |sort

查看上G目录并排序

du -h --max-depth=1 |grep 'G' |sort

查看当前目录下所有一级子目录文件夹大小 并排序

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

二,ls命令

ls -Sl       从大到小排序
ls -Slr      从小到大

可加一个-h,表示"--human-readable",单位是k或者M ,结果列出后,更清楚。
2017-07-04 19:24:17 TStana 阅读数 18986

[Linux] du-查看文件夹大小-并按大小进行排序

使用df 命令查看当前磁盘使用情况:

jack@jiaobuchong:~$ df -lh 
Filesystem      Size  Used Avail Use% Mounted on 
/dev/sda3        18G  5.7G   11G  35% / 
udev            2.7G  4.0K  2.7G   1% /dev 
tmpfs           553M  916K  552M   1% /run 
none            5.0M     0  5.0M   0% /run/lock 
none            2.7G  488K  2.7G   1% /run/shm 
/dev/sda2       946M  128M  754M  15% /boot 
/dev/sda1        93G   87G  5.5G  95% /media/2AA64C7FA64C4D8F_

下面du命令就上场了:

jack@jiaobuchong:~$ pwd 
/home/jack 
jack@jiaobuchong:~$ du -sh  
1.9G    . 
jack@jiaobuchong:~$ cd .. 
jack@jiaobuchong:/home$ du -sh jack/ 
1.9G    jack/ 
jack@jiaobuchong:/home$ du -h --max-depth=0 jack/ 
1.9G    jack/ 

能看到上边得到的相同的结果吧,

-s, –summarize display only a total for each argument, -s这个参数的作用就是仅显示总计,即当前文件夹的大小。

jack@jiaobuchong:~$ du -sh * 
170M    Desktop 
452K    Documents 
161M    Downloads 
12K examples.desktop 
833M    installed-software 
284K    learngit 
4.0K    Music 
4.7M    Pictures 
3.2M    program_pratice 
4.0K    Public 
112K    session 
4.0K    Templates 
4.0K    Videos 
  • 可以将当前目录下所有文件的大小给列出来。那要将这些列出来的文件按照从大到小的方式排序呢?
jack@jiaobuchong:~$ du -sh * | sort -nr 
833M    installed-software 
452K    Documents 
284K    learngit 
170M    Desktop 
161M    Downloads 
112K    session 
12K examples.desktop 
4.7M    Pictures 
4.0K    Videos 
4.0K    Templates 
4.0K    Public 
4.0K    Music 
3.2M    program_pratice

找sort 来帮个忙就可以了。呵呵!这个排序不正常哦,都是因为-h参数的原因,

jack@jiaobuchong:~$ du -s * | sort -nr  
852756  installed-software 
173868  Desktop 
164768  Downloads 
4724    Pictures 
3236    program_pratice 
452 Documents 
284 learngit 
112 session 
12  examples.desktop 
4   Videos 
4   Templates 
4   Public 
4   Music 

这样就正常排序了。

du -s * | sort -nr | head 选出排在前面的10个,

du -s * | sort -nr | tail 选出排在后面的10个。