由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享
第一种:
for tar in *.tar.gz; do tar xvf $tar; donefor tar in *.tar.bz2; 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 zcvf linuxany.tgz --exclude='*/log/*' linuxany/
排除指定文件:
tar zcvf linuxany.tgz --exclude='*/*.log*' linuxany/
问题: 我想进行批量解压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 ...