我bsdtar
从源代码(来自 libarchive 网站)安装,因为我rpm
在yum
.
我能够看到bsdtar
的帮助信息。例如:
$ bsdtar --help
First option must be a mode specifier:
-c Create -r Add/Replace -t List -u Update -x Extract
Common Options:
...
bsdtar 3.1.2 - libarchive 3.1.2
Run Code Online (Sandbox Code Playgroud)
但是当我尝试提取文件时,出现以下错误:
$ bsdtar -xzC . < archive.tar.gz
bsdtar: Error opening archive: Failed to open '/dev/st0'
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
War*_*ung 11
在x
模式下,所有符合 POSIX 的版本都tar
需要-f
从默认值以外的其他地方读取输入存档。要从 中读取stdin
,POSIX 还要求您提供-
文件名:
$ tar -xf - < file.tar
Run Code Online (Sandbox Code Playgroud)
GNUtar
和bsdtar
理解该语法。
GNUtar
与 POSIX 的不同之处在于它接受一个没有明确参数的tar
存档。事实上,POSIX 说没有,它根本不应该使用。从您的问题中可以清楚地看出,您是从 GNU用户那里获得命令行示例的。stdin
-f -
-f -
stdin
tar
bsdtar
-f -
如果您希望它从而stdin
不是文件中读取,则遵循 POSIX要求。
这给我们带来了您的实际问题:当没有给出时-f -
,为什么bsdtar
选择读取/dev/st0
?这就是我上面提到的默认值。POSIX 只说这个默认值是“依赖于系统的”;bsdtar
选择使用第一个磁带驱动器的dev 节点的名称,它恰好/dev/st0
在 Linux 上。1
你需要这样说:
$ bsdtar -xf - < archive.tar.gz
Run Code Online (Sandbox Code Playgroud)
或者,完全跳过重定向:
$ bsdtar -xf archive.tar.gz
Run Code Online (Sandbox Code Playgroud)
我删除了,-z
因为bsdtar
GNU 和 GNUtar
都会自动检测gzip
压缩x
模式。(旧版本的 GNUtar
确实需要压缩类型标志,但在 2004 年发布的1.15 版中添加了自动检测。)
我还删除了该-C .
位,因为它只是告诉bsdtar
在解压缩存档之前更改到当前目录。这是一个空操作。
tar
是Tape ARchiver。tar
来自一个时间的时候几乎每个Unix机器其实也有一个磁带驱动器。 归档时间: |
|
查看次数: |
8544 次 |
最近记录: |