我有一个带有一系列 tarball 的 LTO 磁带,每个包含约 300 个 tiff 文件。我事先不知道压缩包的内容。
我需要从每个 tarball 中提取第一个文件,并将它的校验和与我计算机上存在的相同文件进行比较。
目前,在每个 tarball 上停车后,我运行......
tar -b 1024 -tvf /dev/nst0
...列出内容,然后获取第一个文件名。但我在浪费时间等待 -tvf 完成。
有没有办法只获取第一个文件的名称?
firstfile="$(tar -b 1024 -tvf /dev/nst0 | while read item ; do [[ "$item" =~ ^- ]] && echo "$item" && break ; done )"
“head -n 1”是不够的,因为“tar -tvf”可能以目录开头。
由于 tars 手册页很长,我假设您已阅读它并且没有与您的问题匹配的 tar 选项。我有两个想法可行,但不是很优雅的黑客攻击:
1)在后台启动tar -tvf,保存PID,检查输出直到至少一行,然后杀死tar进程。
2)这个很短,但有点肮脏的解决方案:因为 tarball 可以连接,你也可以在 tarball 本身而不是输出头。截断的 tarball 的 tar -tv 为您提供二进制文件第一行中的文件名以及错误/中止警告。为了确保只获得一个文件名,可以附加输出的另一个 head -n1。
head /dev/nst0 | tar -tv 2> /dev/null