Bash - 仅提取tarball中的第一个文件

时间:2014-10-16 15:04:24

标签: linux bash tar lto

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

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

此刻,我停在每个tarball上后,我跑了......

tar -b 1024 -tvf /dev/nst0

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

由于tars man page很长,我认为你读过它并且没有匹配你的问题的tar选项。我有两个有用的想法,但不是很优雅的黑客攻击:

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

2)这个很短,但是一种肮脏的解决方案:由于tarball可以连接,你也可以自己处理tarball而不是输出。截断的tarball的tar -tv为您提供二进制文件第一行中文件的名称以及错误/中止警告。为了确保只获得一个文件名,可以追加另一个头部-n1。

head /dev/nst0 | tar -tv 2> /dev/null