tar命令批量解压方法总结

由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享:
第一:
for tar in *.tar.gz;  
do
tar xvf $tar;
done

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

#!/bin/bash
for tar in *.tar.gz
do
        tar xvf $tar
done
第二:用tar命令批量解压某个文件夹下所有的tar.gz文件
ls *.tar.gz | xargs -n1 tar xzvf

第三:find -maxdepth 1 -name "*.bz2"|xargs -i tar xvjf {}
这条命令可解压当前目录下的所有bz2文件

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

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

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

问题:
我想进行批量解压tar文件,使用tar -xvf *.tar会出错,提示“Not found in archive”。解决方法有很多,比如写一个脚本之类的。请问为什么tar不支持这种通配符语法呢?是否有特殊的原因?我试过gzip就支gzip -d *.tar.gz。
回答:
通配符是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 ...



一、编译简单源码包
rpm--import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
rpm-qa |grep gpg
源码包的好处:可扩展性的好。源码包,转成rpm
方法一:rpmbuild--rebuild xxx.src.rpm 就会生成xxx.rpm
方法二:rpm-ivh xxx.src.rpm它会生成它源代码,修改源代码,再生成rpm包。
1.解压源码包,查看源始文件:
 
2.构建编译源码包的基本环境
在rhel5中,默认源码包编译环境是:/usr/src/redhat/
在rhel6中,完全不一样了!
 
选择没有依赖关系的源码包安装。安装finger包,目的就是:让系统自动生成编译环境目录:
~/rpmbuild/{BUILD BUILDROOT RPMS SORCESSPECS SRPMS}
3.创建specs文件
 
  依照模板创建spec。在rhel6中,其实直接vim一个后缀为.spec的文件,
自然就会调用:/usr/share/vim/vimfiles/template.spec模式格式,它只是基本格式。
 
编译时要参考源码包中的这2个文件。从中获取包名、版本信息、描述、安装路径、安装前后的脚本,等等。
 
 
开如编译spec文件:
[oliver@desktop8 SPECS]$  vim hello.spec 

4.生成rpm包,安装测试
 
5.gpg签名
 
 
6.放置到yum仓库。安装测试。


分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS