由于linux的tar命令不支持批量解压,所以很多网友编写了好多支持批量解压的shell命令,收集了一下,供大家分享:

第一:
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 "*.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 ...

最新文章

  1. [LeetCode] Flatten 2D Vector 压平二维向量
  2. NSPredicate 过滤功能
  3. 【代码笔记】iOS-翻书效果的实现
  4. PowerShell脚本:随机密码生成器
  5. mysql与mysqld
  6. [java]序列化框架性能对比(kryo、hessian、java、protostuff)
  7. linux下gitflow辅助工具安装和使用
  8. oracle 常用语句
  9. [转]python -m SimpleHTTPServer
  10. android 围绕中心旋转动画
  11. List&lt;string[]&gt; 如何去重
  12. 初探CSRF在ASP.NET Core中的处理方式
  13. windows c++ 错误汇总
  14. SQL Server 深入解析索引存储(堆)
  15. MySQL Execution Plan--EXPLAIN用法
  16. linux 下隐藏进程的一种方法
  17. 【叶问】MySQL误删除frm文件该怎么办?
  18. body中相关标签
  19. LOJ10067 构造完全图
  20. 对某项目中Vuex用法的分析

热门文章

  1. 分治法:快速排序求第K极值
  2. 图论&amp;数学:最小平均值环
  3. Python进行数据分析—可视化之seaborn
  4. c# windows server安装启动与卸载
  5. 【leetcode 简单】第二十题 合并两个有序数组
  6. PHP代码审计学习
  7. Mac nginx 配置
  8. 在Nginx服务器上屏蔽IP
  9. sqlalchemy更新和插入操作
  10. C/C++——C语言数组名与指针