2014-10-16 86 views
0

我有一系列tarball的LTO磁带,每个包含〜300个tiff文件。我不知道tarball的内容。Bash - 仅提取tarball中的第一个文件

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

目前,每个压缩包我运行后停车...

tar -b 1024 -tvf /dev/nst0 

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

有没有办法只得到第一个文件的名字?

回答

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

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

+0

我最好应该调用我的变量“firstfile_description”,因为我保留并使用-v tar选项。 – Jbar 2014-10-16 17:40:15

0

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

1)在后台启动tar -tvf,保存PID,检查输出,直到它至少有一行并终止tar进程。

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

head /dev/nst0 | tar -tv 2> /dev/null 
相关问题