从 tar 中提取单个文件到其他文件夹

从 tar 中提取单个文件到其他文件夹

我已经在多个论坛中搜索了这个问题,并看到了不同的答案,但到目前为止,即使是我在这里看到的答案也没有任何效果。

我想将 tar 中的单个文件提取到不同的目录。

我试过这个:

tar xvf file.tar -C /home/dir/ filename

或这个:

tar -x filename -f file.tar -C /home/dir

但分别得到这些错误:

x filename, 14826 bytes, 29 media blocks.
File -C not present in the archive.
File /home/dir not present in the archive.

和:

tar: /dev/rmt0: A file or directory in the path name does not exist.

第一个解压文件,但在同一目录中,而不是我想要的文件夹中。

答案1

在大多数版本中tar,有两种不同的模式,具体取决于您是否在选项前添加减号。

顶部的AIX tar 手册页总结一下差异:

Berkeley Standards:

tar {c|r|t|u|x} ... [ Archive ] Directory | File ...

X/Open Standards:

tar {-c|-r|-t|-u|-x} ... [-f Archive] ... [-C Directory] File | Directory...

没有减号,tar可以在 Berkeley 兼容模式下工作。在此模式下,选项不遵循现在标准的 UNIX 命令行约定。相反,所有标志必须放在一起(以任何顺序)。该f标志意味着标志后的第一个单词是应该使用的文件名,而不是磁带驱动器/dev/rmt0. (tin代表磁带,默认值反映了这一点。)另请注意,兼容模式下tar没有选项。-C

使用减号,tar其工作方式与大多数 UNIX 命令类似。必须首先指定所有标志(及其参数),然后是非标志。 -f采用文件名作为参数(本质上,文件名属于标志-f),因此file.tar必须紧跟在-f.这就是为什么手册页[-f Archive]Archive.-f-x不带任何参数(filename不属于-x)。再次查看手册页,filename在您的示例中对应于File | Directory...,它们一直位于命令行末尾。

命令的固定版本看起来像

(cd /home/dir; tar xvf /path/to/file.tar filename)

tar -x -f file.tar -C /home/dir filename

GNU tar 做了类似的事情。 三种期权风格很好地解释了差异。

相关内容