如何在Linux或Unix上的目录中提取多个tar包(* .tar.gz)文件

时间:2020-01-09 14:17:07  来源:igfitidea点击:

我已经尝试过tar -xvf * .tar.gz命令,但是得到的错误显示为:

tar (child): *.gz: Cannot open: No such file or directory tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now

如何使用Linux或Unix-shell提示符提取目录中的多个* .tar.gz文件?

Linux或类Unix系统使用tar命令从tar包存档中列出,测试或提取文件,该文件通常在类Unix系统上找到。

Linux/Unix上多个tar包文件的问题

假设您在当前目录中有四个文件,如下所示:

  • conf.tar.gz
  • mysql.tar.gz
  • www.tar.gz

让我们用ls命令验证它

$ ls

输出示例:

conf.tar.gz  mysql.tar.gz  www.tar.gz

要解压缩所有* .tar.gz文件,请执行:

$ tar xvf *.gz

或者

$ tar -zxvf *.tar.gz

或者

$ tar xvf "*.gz"

或者

$ tar -zxvf '*.gz'

提取多个.tar.gz文件

方法1:使用bash循环解压缩多个tar包

使用bash for loop如下:

for f in *.tar.gz; do tar xf "$f"; done

或者

for f in *.tar.gz; do tar -xvf "$f"; done

或者

for f in *.tgz; do tar -xzvf "$f"; done

或者

for f in *.tar.bz2; do tar -xvf "$f"; done

或者

for f in *.tar.bz2; do tar -xjvf "$f"; done

或者

for f in *.tar.xz; do tar -xvf "$f"; done

或者

for f in *.tar.xz; do tar -xvJf "$f"; done

验证一下:

ls

方法2:使用bash/sh/ksh管道解压多个tar包

语法为:

cat *.tar.gz | tar zxvf - -i
cat *.tgz | tar zxvf - -i
cat *.tar.xz | tar Jxvf - -i
cat *.tar.bz2 | tar jxvf - -i

输出示例:

etc/mysql/
etc/mysql/ssl/
etc/mysql/ssl/server-req.pem
etc/mysql/ssl/ca-key.pem
etc/mysql/ssl/client-key.pem
etc/mysql/ssl/server-key.pem
etc/mysql/ssl/server-cert.pem
etc/mysql/ssl/client-cert.pem
etc/mysql/ssl/client-req.pem
etc/mysql/ssl/ca-cert.pem
etc/mysql/conf.d/
etc/mysql/conf.d/mysql.cnf
etc/mysql/conf.d/mysqldump.cnf
etc/mysql/my.cnf.fallback
etc/mysql/my.cnf
etc/mysql/mariadb.cnf
etc/mysql/mariadb.conf.d/
etc/mysql/mariadb.conf.d/50-client.cnf
etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
.....
...
..

-i选项强制tar命令忽略存档(EOF)中的清零块。
如果您使用的是方法2,则需要这样做。