linux中ls与rm删除文件的问题分析

Seven 绯闻SEO 绯闻SEO,一个专注中小企业网站优化的SEO爱好者

在linux中ls与rm命令都比较常用了,今天小编在使用ls配合rm删除文件时碰到一些小问题,下面我们来看看问题解决方案,通常ls列出的文件,想直接管道通过rm -rf删除是无效的.这时就要配合命令xargs使用了.

例如:ls -t|tail -10|xargs rm -rf //按时间排序,删除最后的10个文件

当然,也可以用ls -lt|tail -100|awk '{ print $9 }'|xargs rm -rf 两者效果是相同的同理,如果想按时间倒序排列,也就是说离现在最近的时间越排在最后显示,就用ls -rt当然,也可以使用find 配合rm删除,也可以用下面的语句清空内容.

  1. #!/bin/bash
  2. foriin`lstest.log.??`;do
  3. echo"">$i
  4. done

当然,如果是多个目录下面,再清除文件,也是可以的,只不过多了一层嵌套而忆,我的目录结构如下:

  1. [root@webtomcat]#ll
  2. --总计260
  3. drwxr-xr-x2wwwwww2048012-2809:23bbs
  4. drwxr-xr-x2wwwwww1638412-2800:00comment
  5. drwxr-xr-x2wwwwww3686412-2803:50enterprise
  6. drwxr-xr-x2wwwwww2457612-2800:00expert
  7. drwxr-xr-x2wwwwww3686412-2800:02feedback
  8. drwxr-xr-x2wwwwww3686411-1512:30generator
  9. drwxr-xr-x2wwwwww2457612-2800:02passport
  10. drwxr-xr-x2wwwwww2048012-2800:00search
  11. drwxr-xr-x2wwwwww2048012-2809:35usercenter
  12. [root@webcomment]#ll
  13. ---总计936
  14. -rw-rw-r--1wwwwww212-2809:57catalina.2012-12-24.log
  15. -rw-rw-r--1wwwwww212-2809:57catalina.2012-12-25.log
  16. -rw-rw-r--1wwwwww212-2809:57catalina.2012-12-26.log
  17. -rw-rw-r--1wwwwww212-2809:57catalina.2012-12-27.log
  18. -rw-r--r--1wwwwww3415512-2810:01catalina.out
  19. -rw-rw-r--1wwwwww212-2809:57localhost.2012-12-14.log
  20. -rw-rw-r--1wwwwww212-2809:57localhost.2012-12-17.log
  21. -rw-rw-r--1wwwwww212-2809:57localhost_access_log.2012-12-25.txt--phpfensi.com
  22. -rw-rw-r--1wwwwww212-2809:57localhost_access_log.2012-12-26.txt
  23. -rw-rw-r--1wwwwww62972912-2809:57localhost_access_log.2012-12-27.txt

如果想清空以上所有目录里的所有文件,就可以这样做:

for i in `ls`;do (cd $i ;for m in `ls`;do echo " ">$m;done);done

注:上面的圆括号是不能少的.

而如果想要清空一个文件的内容,再使用xargs配合echo "">file,发现确不能正常生效,如:find . -name "test.*" |xargs echo ""> 因为,find和echo的不是这样配合使用的,其两者简单配合有另外一个妙用:

find . -name "file*" -print | xargs echo "" > /tmp/find.log

该语句的作用,是将当前目录下,所有以file开头的文件查找到,并将其相对路径及名称输入到find.log文件中,输入方式为每行一个,对符合条件的原文件不会做任何改变.

而如果想实现find查找并清空文件,难道我们就没办法了吗?很显然,这是不可能的,菜鸟们的办法是:

  1. #!/bin/bash
  2. foriin`find./server*-name"test.log"`
  3. do
  4. cat/dev/null>$i
  5. done

高手显然不屑于使用这么长的语句,高手们的办法是:

[root@localhost log]# find . -name "maillog*" |awk '{ print "echo>"$0}'|bash

或者把索性把echo也去掉.

[root@localhost log]# find . -name "maillog*" |awk '{ print ">"$0}'|bash

该语句是如何变化为来的得呢?

  1. [root@localhostlog]#find.-name"maillog*"|xargs-ils-l{}
  2. -rw-------1rootroot011-0905:06./maillog
  3. -rw-------1rootroot011-0905:06./maillog.1

以上为找出所有文件,而再利用强大的awk,可以将所有输出的文件前加 echo ""> 以bash语句的方式出现.

  1. [root@localhostlog]#find.-name"maillog*"|awk'{print"echo>"$0}'
  2. echo>./maillog
  3. echo>./maillog.1

find命令配合rm删除某天前的文件.

例1:将/usr/local/backups目录下所有10天前带"."的文件删除

find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \;

find:linux的查找命令,用户查找指定条件的文件.

/usr/local/backups:想要进行清理的任意目录

-mtime:标准语句写法

+10:查找10天前的文件,这里用数字代表天数,+30表示查找30天前的文件.

"*.*":希望查找的数据类型,"*.jpg"表示查找扩展名为jpg的所有文件,"*"表示查找所有文件,这个可以灵活运用,举一反三.

-exec:固定写法

rm -rf:强制删除文件,包括目录

{} \;:固定写法,一对大括号+空格+\

find $1 -name "*.html" -mtime +1 -print0 |xargs -0 rm -v

注:我上面的例子,只是列了一层目录,而find查找时,是会将其下面的子目录内符合条件的语句也会包含进来.

相关广告
  • linux中ls与rm删除文件的问题分析 linux中ls与rm删除文件的问题分析 linux中ls与rm删除文件的问题分析
相关阅读

linux中ls与rm删除文件的问题分析

2019/10/10 17:46:25 | 谷歌SEO算法 | 5G标准出炉