我需要从.tar.gz
CentOS 服务器上的 tarball ( ) 中提取单个文件夹及其子文件夹。我完全不知道如何使用 SSH 终端来执行此操作。
我试过:
gunzip -c files_20100623.0110.tar.gz | tar -xvf home/bsisplas/public_html/staging/template/*.*
但是它似乎无法在存档中找到该文件。另外,gunzip
您在语法中的哪里指定了提取的文件应该放在哪里?至少可以说我是 Linux 终端新手。
答案1
首先,当您使用 选项时-f
,tar
您需要给它一个参数,告诉它存档的文件名。由于您是从 管道中输入的gunzip
,我们使用-
表示标准输入:
gunzip -c files_20100623.0110.tar.gz | tar -xvf - home/bsisplas/public_html/staging/template/*.*
我的下一个观点是,你只需要给出目录名称。(另外:*.*
通常是 DOS 主义。如果你指的是 Unix 中的“所有文件”,只需写*
。如果你写的*.*
是“所有名称中带有点的文件”,这可能会排除没有点的重要文件,例如Makefile
或README
):
gunzip -c files_20100623.0110.tar.gz | tar -xvf - home/bsisplas/public_html/staging/template
tar
这应该可以工作。但是您可以使用的选项让事情变得简单一些-z
,该选项告诉它自己执行gunzip
。我们使用它,并将-
输入文件名替换为存档文件名:
tar -xvzf files_20100623.0110.tar.gz home/bsisplas/public_html/staging/template
这是如何运作的?
答案2
您只需要 tar。您可以使用选项获取 tarball 中的文件列表-t
,然后正常提取,但使用文件路径作为最后一个参数:tar zxvf foo.tar.gz filepath