tar 命令未使用 -t 选项列出 tar 包的内容

tar 命令未使用 -t 选项列出 tar 包的内容

我正在尝试使用以下命令列出 tar 存档的内容

tar -t "filename".tar

但是 shell 一直运行而没有任何输出消息。

我对此进行了研究并发现,我应该使用“-f”选项和 -t 选项来列出档案的内容。

tar -tf "filename".tar

这里有人能回答我为什么我应该使用 -f 选项和 -t 选项来列出档案内容吗?

答案1

这里有人能回答我为什么我应该使用 -f 选项和 -t 选项来列出档案内容吗?

Tar 最初是一种将未压缩的数据写入磁带驱动器的工具。(因此得名 TApe ARchive)。这就是它默认使用磁带驱动器的原因。

在类 Unix 操作系统上,设备与文件一样被处理。磁带驱动器可能是 /dev/st0(设备,SCSI 磁带 0)。这是默认tar 的输入/输出。

如果你想让 tar 访问另一个文件,例如 /dev/st1 (第二个磁带驱动器)或 /home/my_backup.tar (真实的文件),那么您需要使用 -f 选项指定它。


在现代安装上进行测试,确认它仍然默认尝试打开 SCSI 设备:

toad:/home/hennes/demo>tar t demo.tar
tar: Error opening archive: Failed to open '/dev/sa0': No such file or directory

手动指定使用 -f 打开的文件可以正常工作

toad:/home/hennes/demo>tar tf demo.tar
testfile1
testfile2
testfile3

Pauls 的帖子似乎表明这可能不再是所有版本的 tar 的默认设置。如今,从 stdin 读取更有意义了,尽管它破坏了向后兼容性。因此,我仍然更喜欢-使用 stdout 的文件名。

答案2

默认情况下,tar从 stdin 获取输入 - 例如,从另一个命令的输出获取输入。

开关f告诉它从文件中获取输入。

正确的语法f应该是

cat filename.tar | tar t

(注意,不需要使用连字符tar)。 cat将参数 out 中的文件内容放入 stdout。管道|符号获取 stdout 并将其传递给下一个命令 stdin。

一直停留在那里的原因tar是它在等待数据到达标准输入。

相关内容