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

评论

同样,将-C,--directory DIR \ n更改为目录DIR应该描述为将输出目录更改为DIR(如果DIR不存在,将失败)。谢谢@Mich。另请参阅@Bryan_Larsen的答案。

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

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

#1 楼

要将存档解压缩到当前目录以外的其他目录,请使用tar选项-C--directory,如

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


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

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

评论


可以删除路径吗:即只检索文件

– zzapper
2014年8月26日14:52

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

–IQAndreas
2015年5月7日6:15



@consultstan xkcd.com/1168

–邓肯X辛普森
16年11月28日在21:15

这些年来,在tar积累了所有选项之后,如果不存在创建输出目录的选项,那么仍然没有选择吗?

–EM0
18年4月13日在8:21

我完全同意,如果不存在输出目录,应该有一个选项来创建它。否则,您可以提取文件并使用mv。

– Marius Hofert
19年5月13日在11:50

#2 楼

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

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


评论


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

– bshea
17-4-28在16:51



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

– Jack_Hu
19年1月30日在17:54

请注意,这可以删除任何数量的引导目录,而不仅仅是一个:--strip-components = NUM​​BER从提取时的文件名中剥离NUMBER个引导组件

– aexl
19-10-28在7:37



#3 楼

结合以前的答案和评论:

要提取内容并在缺少目标目录时创建目标目录:

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


评论


您可以通过在tar命令中添加--one-top-level = / target / directory选项并删除-C选项来跳过创建目录的步骤。看到这个答案

–smac89
19/12/12在2:02



#4 楼

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

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


如果需要,您可以指定自己的目录,tar会自动创建它。 />
tar zxvf filename.tgz --one-top-level=new_directory


评论


我正在使用GNU tar 1.26,并且出现--one-top-level的无法识别的选项错误

–艾玛·斯特鲁贝尔(Emma Strubell)
18/09/24在14:29



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

–伪影
19年7月20日在0:51

#5 楼

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

cd /tmp
mkdir folder
touch folder/file.txt


执行操作时一切都按预期=现在将其解压缩,将其解压缩为tar -zcvf folder.tar.gz folder(如果删除了文件夹,则会创建该文件夹)。

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

#6 楼

使用tar 1.29,我们可以在tar文件名之后添加目录名称。例如,

tar zxvf tar-file directory-name/


评论


在tar v1.30上尝试过此命令在tar下失败:目录名:在存档tar中找不到:由于先前的错误而以失败状态退出-请验证它是否确实有效,否则请更正/删除答案-谢谢。

–stason
11月17日下午2:47