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

find . -type f -name "weapon.log*" | xargs -i rm -fr "{}" ;

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/目录下。

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

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

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

tar: ./stat_64_138_2012_05_26_log.tgz:归档中找不到

tar: ./stat_10_10_75_80_2012_05_26_log.tgz:归档中找不到

tar: ./stat_64_139_2012_05_26_log.tgz:归档中找不到

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>

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

是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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值