linux下文件的批量查找与复制命令、批量解压、批量删除功能

12 篇文章 0 订阅
  1. find  .  -type f -name "weapon.log*" | xargs -i  rm -fr "{}" ;  
  2. find . -name "stat_*_2012_05_26_log.tgz" -exec cp {} /home/adstat/apache_log/stat/ \;  

 上述命令①代表在当前文件夹下递归找到符合weapon.log开头的文件并删除,如果要指定其它目录,可以把.替换成绝对路径即可。

   ②代表在当前文件夹下查找符合正则表达式stat_*_2012_05_26_log.tgz 的文件并分别复制到/home/adstat/apache_log/stat/目录下。 

  那么批量解压文件是否这样呢:

  1. find . -name "stat_*_2012_05_26_log.tgz"|xargs tar -zxvf  

  其实是不可以的,执行结果如下:

  1. tar: ./stat_64_138_2012_05_26_log.tgz:归档中找不到  
  2. tar: ./stat_10_10_75_80_2012_05_26_log.tgz:归档中找不到  
  3. tar: ./stat_64_139_2012_05_26_log.tgz:归档中找不到  
  4. tar: ./stat_74_195_2012_05_26_log.tgz:归档中找不到  

  为什么tar不支持这种通配符语法呢?

通配符是shell解决的问题

tar -xvf *.tar

实际上执行tar时,tar接收到的是

tar -xvf a.tar b.tar c.tar ...

如果当前目录跟本没有tar的东西,那么tar就收到'*.tar'这个参数

与win不同,linux所有字符都可以作文件名,也即目录中不存在着 *.tar这个文件

为了防止 *.tar被shell解释为a.tar b.tar c.tar...

可以给它加个单引号

用tar解开一个Archive时,语法是

tar -xvf <tarfile.tar> <archived_file>

<tarfile.tar> 是选项f所要求的,只能是一个文件,比如myfiles.tar。

<archived_file> 是myfiles.tar所包含的归了档的文件中的一个或者多个成员文件。如果是多个,可以用通配符。

先别跟我急,我知道,这些你是清楚的。但是,你的问题是,用了

tar -xvf *.tar

如楼上所说,tar接收到的是

tar -xvf a.tar b.tar c.tar ...

tar把你的意图理解为,在a.tar里解出b.tar c.tar .

可以使用的方法如下:

方法:

第一:

for tar in *.tar.gz;  do tar xvf $tar; done

for tar in *.tar.bz2; do tar xvf $tar; done

第二:用tar命令批量解压某个文件夹下所有的tar.gz文件

ls *.tar.gz | xargs -n1 tar xzvf

第三:find -maxdepth 1 -name "*.gz"|xargs -i tar xvzf {}

这条命令可解压当前目录下的所有gz文件

批量解压是比较郁闷的事,以前尝试各种方法,甚至用脚本循环语句解压都不行

现在发现这条命令可以搞定,maxdepth表示搜索深度,1代表只搜索当前目录

第四:for i in $(ls *.gz);do tar xvf $i;done

---------------------------------------------------------

find /root/aa/group2 -type f -name "*.png*.tar"|xargs -i tar vxf {} && rm -rf /root/aa/group2/*.png.*.tar && echo $(date) success!

1.找出这个目录下/root/aa/group2 是文件类型的 已*.png*.tar匹配的名字 

xargs -i

加-i 参数直接用 {}就能代替管道之前的标准输出的内容

2.xargs -i tar vxf {}

解压匹配到的tar包

3.rm -rf /root/aa/group2/*.png.*.tar

解压完成后删除tar包

4.echo $(date) success!

打印出系统时间

----------------------------------------------------------

多次使用结果集

mkdir /root/group2/backuptar && find /root/group2 -type f -name "20*.png*.tar"|xargs -i sh -c 'tar vxf {} && mv {} ./backuptar && rm -rf {}' && echo $(date) success! >> /root/group2/tarlog.txt

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

softwareDragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值