2

我有一个带有一系列 tarball 的 LTO 磁带,每个包含约 300 个 tiff 文件。我事先不知道压缩包的内容。

我需要从每个 tarball 中提取第一个文件,并将它的校验和与我计算机上存在的相同文件进行比较。

目前,在每个 tarball 上停车后,我运行......

tar -b 1024 -tvf /dev/nst0

...列出内容,然后获取第一个文件名。但我在浪费时间等待 -tvf 完成。

有没有办法只获取第一个文件的名称?

4

2 回答 2

2
firstfile="$(tar -b 1024 -tvf /dev/nst0 | while read item ; do [[ "$item" =~ ^- ]] && echo "$item" && break ; done )"

“head -n 1”是不够的,因为“tar -tvf”可能以目录开头。

于 2014-10-16T15:12:36.657 回答
0

由于 tars 手册页很长,我假设您已阅读它并且没有与您的问题匹配的 tar 选项。我有两个想法可行,但不是很优雅的黑客攻击:

1)在后台启动tar -tvf,保存PID,检查输出直到至少一行,然后杀死tar进程。

2)这个很短,但有点肮脏的解决方案:因为 tarball 可以连接,你也可以在 tarball 本身而不是输出头。截断的 tarball 的 tar -tv 为您提供二进制文件第一行中的文件名以及错误/中止警告。为了确保只获得一个文件名,可以附加输出的另一个 head -n1。

head /dev/nst0 | tar -tv 2> /dev/null
于 2014-10-17T11:41:57.687 回答