解压 tar.gz 中的特定文件夹

fra*_*ank 8 command-line osx ubuntu tar terminal

如何使用终端/命令行(Ubuntu 14.04 (Trusty Tahr))解压/解压 tar.gz 中的特定文件夹?

精确的:

-file.tar.gz
 -- folder1
 -- folder2
Run Code Online (Sandbox Code Playgroud)

如何提取...

... folder1 -->  ~/locationX
... folder2 --> ~/locationY
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

请注意: 这纯粹与终端/命令行相关,而不是Puppet。这只是一个例子 - 我会在 Puppet 中节省大约 50 个额外的步骤,如果有一个命令可以从 a 中解压缩特定文件夹,tar.gz因为我可以避免移动文件......

Bar*_*mar 15

我认为应该这样做:

tar -xzf file.tar.gz -C ~/locationX folder1 -C ~/locationY folder2
Run Code Online (Sandbox Code Playgroud)

-C选项表示在进行提取之前切换到指定的目录。在 tarfile 名称后指定文件名参数会将提取限制为仅这些文件或目录。你可以-C像你一样重复这个悬挂目录。

请注意,这将在子目录中进行提取:folder1将进入~/locationX/folder1folder2将进入~/locationY/folder2。您可以使用以下--strip-components选项来防止这种情况:

tar -xzf file.tar.gz -C ~/locationX --strip-components=1 folder1 \
                     -C ~/locationY --strip-components=1 folder2
Run Code Online (Sandbox Code Playgroud)

此外,如果 tar 文件中的实际前缀是./folder1./folder2,就像您创建 tar 文件时一样tar -czf file.tar.gz .,您需要./在文件名参数中包含前缀,并更改为--strip-components=2.