您的位置:首页 > 运维架构 > Linux

(linux命令学习)找到相应性质的文件并删除

2015-09-03 22:31 567 查看
今天看到find命令,于是想起怎么去做“找到指定大小的文件并删除”

find /tmp -maxdepth 1 -name "*.*" -exec ls -l {} \; | awk '{if($5>1000000) print $9}' | xargs rm -fr

找到目录下指定大小的文件并删除前5个最大的

1、制作测试文件

# vim test.sh

#!/bin/sh

for i in {1..30}

do

    dd if=/dev/zero of=/tmp/test/$i.file bs=1M count=$i

done

#chmod +x test.sh

#./test.sh

#ls -lh

total 466M

-rw-r--r-- 1 root root  10M Sep  3 21:17 10.file

-rw-r--r-- 1 root root  11M Sep  3 21:17 11.file

-rw-r--r-- 1 root root  12M Sep  3 21:17 12.file

-rw-r--r-- 1 root root  13M Sep  3 21:17 13.file

-rw-r--r-- 1 root root  14M Sep  3 21:17 14.file

-rw-r--r-- 1 root root  15M Sep  3 21:17 15.file

-rw-r--r-- 1 root root  16M Sep  3 21:17 16.file

-rw-r--r-- 1 root root  17M Sep  3 21:17 17.file

-rw-r--r-- 1 root root  18M Sep  3 21:17 18.file

-rw-r--r-- 1 root root  19M Sep  3 21:17 19.file

-rw-r--r-- 1 root root 1.0M Sep  3 21:17 1.file

-rw-r--r-- 1 root root  20M Sep  3 21:17 20.file

-rw-r--r-- 1 root root  21M Sep  3 21:17 21.file

-rw-r--r-- 1 root root  22M Sep  3 21:17 22.file

-rw-r--r-- 1 root root  23M Sep  3 21:17 23.file

-rw-r--r-- 1 root root  24M Sep  3 21:17 24.file

-rw-r--r-- 1 root root  25M Sep  3 21:17 25.file

-rw-r--r-- 1 root root  26M Sep  3 21:17 26.file

-rw-r--r-- 1 root root  27M Sep  3 21:17 27.file

-rw-r--r-- 1 root root  28M Sep  3 21:17 28.file

-rw-r--r-- 1 root root  29M Sep  3 21:17 29.file

-rw-r--r-- 1 root root 2.0M Sep  3 21:17 2.file

-rw-r--r-- 1 root root  30M Sep  3 21:17 30.file

-rw-r--r-- 1 root root 3.0M Sep  3 21:17 3.file

-rw-r--r-- 1 root root 4.0M Sep  3 21:17 4.file

-rw-r--r-- 1 root root 5.0M Sep  3 21:17 5.file

-rw-r--r-- 1 root root 6.0M Sep  3 21:17 6.file

-rw-r--r-- 1 root root 7.0M Sep  3 21:17 7.file

-rw-r--r-- 1 root root 8.0M Sep  3 21:17 8.file

-rw-r--r-- 1 root root 9.0M Sep  3 21:17 9.file

-rwxr-xr-x 1 root root   91 Sep  3 21:17 test.sh

2、解决问题

开始的时候尝试使用

#]# find /tmp/test/ -maxdepth 1 -name "*.*" -exec ls -lh {} \; | sort -n

-rw-r--r-- 1 root root 10M Sep  3 21:17 /tmp/test/10.file

-rw-r--r-- 1 root root 1.0M Sep  3 21:17 /tmp/test/1.file

-rw-r--r-- 1 root root 11M Sep  3 21:17 /tmp/test/11.file

-rw-r--r-- 1 root root 12M Sep  3 21:17 /tmp/test/12.file

-rw-r--r-- 1 root root 13M Sep  3 21:17 /tmp/test/13.file

-rw-r--r-- 1 root root 14M Sep  3 21:17 /tmp/test/14.file

-rw-r--r-- 1 root root 15M Sep  3 21:17 /tmp/test/15.file

-rw-r--r-- 1 root root 16M Sep  3 21:17 /tmp/test/16.file

-rw-r--r-- 1 root root 17M Sep  3 21:17 /tmp/test/17.file

-rw-r--r-- 1 root root 18M Sep  3 21:17 /tmp/test/18.file

-rw-r--r-- 1 root root 19M Sep  3 21:17 /tmp/test/19.file

-rw-r--r-- 1 root root 20M Sep  3 21:17 /tmp/test/20.file

-rw-r--r-- 1 root root 2.0M Sep  3 21:17 /tmp/test/2.file

-rw-r--r-- 1 root root 21M Sep  3 21:17 /tmp/test/21.file

-rw-r--r-- 1 root root 22M Sep  3 21:17 /tmp/test/22.file

-rw-r--r-- 1 root root 23M Sep  3 21:17 /tmp/test/23.file

-rw-r--r-- 1 root root 24M Sep  3 21:17 /tmp/test/24.file

-rw-r--r-- 1 root root 25M Sep  3 21:17 /tmp/test/25.file

-rw-r--r-- 1 root root 26M Sep  3 21:17 /tmp/test/26.file

-rw-r--r-- 1 root root 27M Sep  3 21:17 /tmp/test/27.file

-rw-r--r-- 1 root root 28M Sep  3 21:17 /tmp/test/28.file

-rw-r--r-- 1 root root 29M Sep  3 21:17 /tmp/test/29.file

-rw-r--r-- 1 root root 30M Sep  3 21:17 /tmp/test/30.file

-rw-r--r-- 1 root root 3.0M Sep  3 21:17 /tmp/test/3.file

-rw-r--r-- 1 root root 4.0M Sep  3 21:17 /tmp/test/4.file

-rw-r--r-- 1 root root 5.0M Sep  3 21:17 /tmp/test/5.file

-rw-r--r-- 1 root root 6.0M Sep  3 21:17 /tmp/test/6.file

-rw-r--r-- 1 root root 7.0M Sep  3 21:17 /tmp/test/7.file

-rw-r--r-- 1 root root 8.0M Sep  3 21:17 /tmp/test/8.file

-rw-r--r-- 1 root root 9.0M Sep  3 21:17 /tmp/test/9.file

-rwxr-xr-x 1 root root 91 Sep  3 21:17 /tmp/test/test.sh

由上可见,得出的结果排序并不是按预想的那样。find命令得出的结果都是字符。

find传递给sort的是字符串,sort对字符串的排序是先对第一个字符来排序,因此会导致出现上面的结果。

上面的结果,是无法得到我们问题的操作效果的。

改用du来统计文件大小

#du -sh * | sort -n

1.1M    1.file

2.1M    2.file

3.1M    3.file

4.0K    test.sh

4.1M    4.file

5.1M    5.file

6.1M    6.file

7.1M    7.file

8.1M    8.file

9.1M    9.file

11M     10.file

12M     11.file

13M     12.file

14M     13.file

15M     14.file

16M     15.file

17M     16.file

18M     17.file

19M     18.file

20M     19.file

21M     20.file

22M     21.file

23M     22.file

24M     23.file

25M     24.file

26M     25.file

27M     26.file

28M     27.file

29M     28.file

30M     29.file

31M     30.file

我们要找出前5个最大的

#du -sh * | sort -nr | head -n 5

31M     30.file

30M     29.file

29M     28.file

28M     27.file

27M     26.file

删除 5个最大的文件

du -sh * | sort -rn | head -n 5 | xargs rm -fr

看看操作后的结果

# du -sh * | sort -rn

26M     25.file

25M     24.file

24M     23.file

23M     22.file

22M     21.file

21M     20.file

20M     19.file

19M     18.file

18M     17.file

17M     16.file

16M     15.file

15M     14.file

14M     13.file

13M     12.file

12M     11.file

11M     10.file

9.1M    9.file

8.1M    8.file

7.1M    7.file

6.1M    6.file

5.1M    5.file

4.1M    4.file

4.0K    test.sh

3.1M    3.file

2.1M    2.file

1.1M    1.file

结果如预期,完成 !

总结:

1、find命令查找的结果,传递给下一个命令时是字符数据类型,因此注意使用,特别是排序等

2、查找文件的大小,最好还是使用du,特别是需要排序的情况下

3、如果使用du并需要传递给后面的命令操作时,最好不要使用-h参数,因为如上所示4K与4M会排在一起,会导致误 操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux