我已经在多个论坛中搜索了这个问题,并看到了不同的答案,但到目前为止,即使是我在这里看到的答案也没有任何效果。
我想将 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
. (t
in代表磁带,默认值反映了这一点。)另请注意,兼容模式下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 做了类似的事情。 三种期权风格很好地解释了差异。