我有一个包含一系列tarball的LTO磁带,每个包含约300个tiff文件。我事先不知道tarball的内容。
我需要从每个tarball中提取第一个文件,并将其与我计算机上存在的同一文件进行比较。
此刻,我停在每个tarball上后,我跑了......
tar -b 1024 -tvf /dev/nst0
...列出内容然后获取第一个文件名。但是我浪费时间等待-tvf完成。
有没有办法只获取第一个文件的名称?
答案 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