Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2877640
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: Python/Ruby

2012-09-30 22:21:40


1、批量删除当前目录下后缀名为.c的文件,如a.c、b.c 
linux中也是可以使用rm *.bak来删除一定数目的文件,但是当文件数量过大时,会造成缓冲区溢出,这是因为rm 的处理机制造成的。因此rm *.bak在linux中不是一定能够删除所有的*.bak的文件,特别是当文件数量很多的时候。我们应该怎么能够删除这些文件呢?其实linux提供了一系列的操作工具来进行处理。我们可以才find 来把*.bak的文件文件一个一个的查找到并且列出来。现在我们可以通过命名管道输出到xargs命令上,xargs命令接收参数,并将接收的参数作为要执行命令的参数来进行,执行附加命令,因此我们可以得出:删除*.bak的文件命令行为:
find . -name "*.bak" |xargs rm -f 
以上命令可以删除当前目录下扩展名为*.bak的所有文件,而不受文件数量的限制。

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用  

点击(此处)折叠或打开

  1. find . -name "*.c" |xargs rm -f
2、写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。

点击(此处)折叠或打开

  1. #!/bin/sh
  2. for filename in `find /home/king -type f -name "abc*"|head -n 100`
  3. do
  4. sed -n '1p' $filename>>/home/king/new
  5. done
注释:第一,用到了find命令,其中-type f表示选取普通文件,-name用于设定文件名;第二,head -n 100命令用于取出前100项。第三,sed -n ’1p’用于取出文件的第一行内容。第四,>>new表示追加到文件new中。



阅读(1301) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~