我正在尝试取消归档一个非常大的目录。以下是解压整个内容的方法:
$ sudo tar -xjf itunes20140618.tbz --verbose
x itunes20140618/
x itunes20140618/genre_artist
x itunes20140618/imix_type
...etc...
但是,如果我尝试仅取消存档一个文件,它会正确执行此操作,但命令将无限期挂起。此外,使用 --verbose 语句时它不会打印任何输出。这是一个例子:
$ sudo tar -xjf itunes20140618.tbz itunes20140618/imix --verbose
[ nothing prints...it just hangs. But it does un-tar that single file ]
答案1
不要在非选项参数之后指定选项,尤其是tar
它是一个非标准命令,其多种实现支持多种古老和较新的方法来解析选项、操作和参数。
在:
tar -xjf itunes20140618.tbz itunes20140618/imix --verbose
itunes20140618.tbz
将是选项的参数-f
,itunes20140618/imix
一个额外的非选项参数,用作从存档中提取的成员的名称。是否--verbose
被视为额外参数(要提取的另一个成员的名称)或选项将取决于其实现和版本,tar
甚至可能取决于它的编译方式或运行时环境。
就您而言,您很可能是那些不将其视为全局选项的tar
人(大多数)之一。--verbose
在这里,使用:
tar -xjf itunes20140618.tbz --verbose itunes20140618/imix
或者更便携:
bunzip2 < itunes20140618.tbz | tar xvf - itunes20140618/imix
或者tar
用标准替换(尽管便携性较差)pax
:
bunzip2 < itunes20140618.tbz | pax -vr itunes20140618/imix
答案2
您正在使用的bzip2
不是文件归档器所以tar
本质上充当 a file archiver
并bzip2
压缩它们。
例如,使用 tar 归档文件集合,然后使用 gzip 压缩生成的归档文件会生成扩展名为 .tar.gz 的文件。
但这种方法有一个缺点,正如 wiki 文章中所述:
提取或修改一个文件是很困难的。提取一个文件需要解压缩整个存档,这可能非常耗时和空间。
因此,如果您经常提取单个文件,我的建议是仅使用.tar
or.zip
或。.rar