LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 790|回复: 6

tar 居然无法同时解开多个 tarball

[复制链接]
发表于 2010-8-5 19:15:15 | 显示全部楼层 |阅读模式
  假如当前目录下有许多 ".tar.gz" 文件,执行 "tar zxf *.tar.gz" 会报错。难道需要一个一个地解开那些东西?
发表于 2010-8-5 19:36:43 | 显示全部楼层
好像是的,
for a in *.tar.gz;do tar xzf "$a";done
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-5 19:46:44 | 显示全部楼层
多谢楼上的,我还从别人那里得到一个有效的解答:

ls *.tar.gz | xargs -n 1 tar xzf
回复 支持 反对

使用道具 举报

发表于 2010-8-6 09:53:43 | 显示全部楼层
是ml里面的吧,我一般用一个脚本,某论坛里面(似乎是arch)扒出来的
  1. #!/bin/bash
  2. for archive in $*; do
  3.     if [ -f $archive ] ; then
  4.         case $archive in
  5.             *.tar.bz2)
  6.                 time -p tar xvf $archive
  7.                 ;;
  8.             *.tar.gz)
  9.                 time -p tar xvf $archive
  10.                 ;;
  11.             *.bz2)
  12.                 time -p bunzip2 $archive
  13.                 ;;
  14.             *.rar|*.RAR)
  15.                 time -p rar x $archive
  16.                 ;;
  17.             *.gz)
  18.                 time -p gunzip $archive
  19.                 ;;
  20.             *.tar)
  21.                 time -p tar xvf $archive
  22.                 ;;
  23.             *.tbz2)
  24.                 time -p tar xvf $archive
  25.                 ;;
  26.             *.tgz)
  27.                 time -p tar xvf $archive
  28.                 ;;
  29.             *.zip | *.ZIP | *.jar)
  30.                 time -p unzip.pl $archive
  31. #                time -p unzip $archive
  32.                 ;;
  33.             *.Z)
  34.                 time -p uncompress $archive
  35.                 ;;
  36.             *.7z)
  37.                 time -p 7z x $archive
  38.                 ;;
  39.             *.xz)
  40.                 time -p xz -d $archive
  41.                 ;;
  42.             *)
  43.                 echo "don't know how to extract '$archive'..."
  44.                 ;;
  45.         esac
  46.     else
  47.         echo "'$archive' is not a valid file!"
  48.     fi
复制代码

里面的unzip.pl可以解决中文乱码问题:
  1. #!/usr/bin/perl
  2. use Archive::Zip;
  3. use Encode qw(decode encode);
  4. sub usage {
  5.     print <<USAGE;
  6. USAGE: unzip.pl ZIPFILE [FROMCODE=utf-8 [TOCODE=utf-8]]
  7. USAGE
  8.     exit;
  9. }
  10. usage unless -e $ARGV[0];
  11. $zip = Archive::Zip->new($ARGV[0]);
  12. $from = $ARGV[1] || 'utf-8';
  13. $to = $ARGV[2] || 'utf-8';
  14. for ($zip->memberNames()) {
  15.     $member = $zip->memberNamed($_);
  16.     $_ = encode($to, decode($from, $_));
  17.     $zip->extractMember($member, $_);
  18. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2010-8-6 15:48:00 | 显示全部楼层
  1. find . -name "*.tar.gz" -exec tar xf {} \;
复制代码
我一直认为很多命令不支持一些灵活的参数是因为被 find 的灵活抑制了。
回复 支持 反对

使用道具 举报

发表于 2010-8-6 22:52:30 | 显示全部楼层
Post by stesen;2106965
是ml里面的吧,我一般用一个脚本,某论坛里面(似乎是arch)扒出来的
  1. #!/bin/bash
  2. for archive in $*; do
  3.     if [ -f $archive ] ; then
  4.         case $archive in
  5.             *.tar.bz2)
  6.                 time -p tar xvf $archive
  7.                 ;;
  8.             *.tar.gz)
  9.                 time -p tar xvf $archive
  10.                 ;;
  11.             *.bz2)
  12.                 time -p bunzip2 $archive
  13.                 ;;
  14.             *.rar|*.RAR)
  15.                 time -p rar x $archive
  16.                 ;;
  17.             *.gz)
  18.                 time -p gunzip $archive
  19.                 ;;
  20.             *.tar)
  21.                 time -p tar xvf $archive
  22.                 ;;
  23.             *.tbz2)
  24.                 time -p tar xvf $archive
  25.                 ;;
  26.             *.tgz)
  27.                 time -p tar xvf $archive
  28.                 ;;
  29.             *.zip | *.ZIP | *.jar)
  30.                 time -p unzip.pl $archive
  31. #                time -p unzip $archive
  32.                 ;;
  33.             *.Z)
  34.                 time -p uncompress $archive
  35.                 ;;
  36.             *.7z)
  37.                 time -p 7z x $archive
  38.                 ;;
  39.             *.xz)
  40.                 time -p xz -d $archive
  41.                 ;;
  42.             *)
  43.                 echo "don't know how to extract '$archive'..."
  44.                 ;;
  45.         esac
  46.     else
  47.         echo "'$archive' is not a valid file!"
  48.     fi
复制代码
貌似新的tar可以自动处理各种压缩格式,不必指定了
回复 支持 反对

使用道具 举报

发表于 2010-8-9 17:24:49 | 显示全部楼层
支持一下,也学学。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表