如何使用“ tar”命令将文件提取到另一个目录?


672

我以为tar archive.tar /users/mylocation可以,但是不行。我怎样才能做到这一点?


1
另外,-C, --directory DIR\n change to directory DIR应将其描述为change output directory to DIR (will fail if DIR doesn't exist)。谢谢@Mich。另请参阅@Bryan_Larsen的答案。
有效时间

1
@Ujjwal Sing:的确,tar手册页没有那么大的帮助。它将“ -C DIR”描述为“更改为目录DIR”。更糟糕的是:“ tar -C mydir xf archive.tar”不起作用,而“ tar xf archive.tar -C mydir”起作用。
Pat Morin

@PatMorin公平地说,一旦您了解了调用约定的参数,就可以使用它。您也可以执行tar xfC archive.tar mydirtar -C mydir -xf archive.tar。坦白地说,这只是混合了破坏样式的传统样式和GNU样式的标志。传统标志作为第一个参数作为一个blob传递。如果不是第一个,您就不能指望它们能起作用。(我的意思是,是的,无论如何都可以解释它-我的观点是超越标准,而不是标准标准)
Nic Hartley

Answers:


958

要将档案解压缩到不同于当前目录的目录,请使用-C,或--directorytar选项,如下所示:

tar -xf archive.tar -C /target/directory

请注意,目标目录必须在运行该命令之前存在(可以通过创建mkdir /target/directory)。

阅读手册页(命令:)以man tar获取其他选项。


路径是否可以剥离:即仅检索文件
zzapper 2014年

3
如果文件较大,则在运行该命令时,在工作几秒钟甚至几分钟后,您只会获得任何输出。您可以通过添加-v标志(详细模式)来解决此问题,该标志列出了提取文件时每个文件的名称。
IQAndreas,2015年

如果您对此有疑问,请注意--strip-components=1其他答案的建议。
DreadPirateShawn


9
这些年来,在所有选项tar都积累了之后,如果不存在创建输出目录的选项,那么这还真令人惊讶吗?
EM0

260

请注意,如果您的压缩文件已经包含要更改的目录名称,请添加以下--strip-components=1选项:

tar xf archive.tar -C /target/directory --strip-components=1

2
谢谢。通过wget / etc下载始终有一个“父”目录。这是imo的完整答案-或应在上面的答案中注明。
bshea

正是我想要的。--strip-components当运行可能使用不同版本的预配器时,此功能非常有用。这种方式/target/directory可以是通用名称,而不必担心提供者如何选择命名其存档文件夹。
Jack_Hu

30

结合之前的答案和评论:

仅提取内容并创建目标目录(如果缺少):

mkdir -p /target/directory && tar xf archive.tar -C /target/directory

提取并删除zip中的根(第一级)目录

mkdir -p /target/directory && tar xf archive.tar -C /target/directory --strip-components=1

20

另一种选择是使用--one-top-level。这将基于原始文件名自动创建目录。

tar zxvf filename.tgz --one-top-level

另外,如果需要,您可以指定自己的名称,tar会自动创建它。

tar zxvf filename.tgz --one-top-level=new_directory

3
我使用的是GNU tar 1.26,并且遇到了无法识别的选项错误--one-top-level
Emma Strubell

这是我需要的答案。非常有用的“ not”(不必指定目录名称),或记住将引用回该文件的名称的特殊代码。谢谢。
po

2

我发现与提取有关的有趣之处在于,它取决于创建存档的方式,请参见此示例

cd /tmp
mkdir folder
touch folder/file.txt

当您执行tar -zcvf folder.tar.gz folder所有操作均符合预期时=现在将其解压缩时,它将被解压缩(如果删除了文件夹,则将创建文件夹)/tmp/folder/

但是,当您创建tar as tar -zcvf tmp-folder.tar.gz /tmp/folder并将其解压缩到/ tmp文件夹中时,结果将是/tmp/tmp/folderdirectory!在这种情况下,您必须将其解压缩到/-tar -xf tmp-folder.tar.gz -C /


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.