加入收藏 | 设为首页 | 会员中心 | 我要投稿 衡阳站长网 (https://www.0734zz.cn/)- 数据集成、设备管理、备份、数据加密、智能搜索!
当前位置: 首页 > 教程 > 正文

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

发布时间:2022-06-18 05:43:40 所属栏目:教程 来源:互联网
导读:在linux中ls与rm命令都比较常用了,今天小编在使用ls配合rm删除文件时碰到一些小问题,下面我们来看看问题解决方案,通常ls列出的文件,想直接管道通过rm -rf删除是无效的.这时就要配合命令xargs使用了. 例如:ls -t|tail -10|xargs rm -rf //按时间排序,删除最后
  在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删除,也可以用下面的语句清空内容.
 
  #!/bin/bash
  for i in `ls test.log.??` ;do
  echo "">$i
  done

  如果想清空以上所有目录里的所有文件,就可以这样做:
 
  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查找并清空文件,难道我们就没办法了吗?很显然,这是不可能的,菜鸟们的办法是:
 
  #!/bin/bash
  for i in `find ./server* -name "test.log" `
  do
  cat /dev/null > $i
  done
  高手显然不屑于使用这么长的语句,高手们的办法是:
 
  [root@localhost log]# find . -name "maillog*" |awk '{ print "echo>"$0}'|bash
 
  或者把索性把echo也去掉.
 
  [root@localhost log]# find . -name "maillog*" |awk '{ print ">"$0}'|bash
 
  该语句是如何变化为来的得呢?
 
  [root@localhost log]# find . -name "maillog*"|xargs -i ls -l {}
  -rw------- 1 root root 0 11-09 05:06 ./maillog
  -rw------- 1 root root 0 11-09 05:06 ./maillog.1
  以上为找出所有文件,而再利用强大的awk,可以将所有输出的文件前加 echo ""> 以bash语句的方式出现.
 
  [root@localhost log]# find . -name "maillog*"|awk '{print "echo > "$0}'
  echo > ./maillog
  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查找时,是会将其下面的子目录内符合条件的语句也会包含进来.

(编辑:衡阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读