bash在tar ball中寻找文件名

Hen*_*nry 2 unix linux bash

这里我有test.tar.gz文件,它的结构如下:

folder/
folder/folder1
folder/folder1/aa
folder/folder1/bb
folder/folder2
folder/folder2/cc
Run Code Online (Sandbox Code Playgroud)

有没有办法找到第一级文件夹的名称?

Syl*_*oux 8

对于简单的情况,那么:

tar tf archive.tar | head -1
Run Code Online (Sandbox Code Playgroud)

......但是tar档案不是必须"单根":

sh$ mkdir -p folder/folder1
sh$ mkdir -p folder/folder2
sh$ touch folder/folder1/{aa,bb}
sh$ touch folder/folder2/cc
sh$ mkdir -p other/folder3
sh$ touch other/folder3/dd
sh$ mkdir -p yet/an/other
sh$ tar cvf f.tar folder other yet/an
folder/
folder/folder1/
folder/folder1/aa
folder/folder1/bb
folder/folder2/
folder/folder2/cc
other/
other/folder3/
other/folder3/dd
yet/an/
yet/an/other/
Run Code Online (Sandbox Code Playgroud)

另外,请注意上面的例子,最后的条目:有子文件夹但不是根文件夹.

在这种情况下,您可能会提取各种"根":

sh$ tar tf f.tar | sed -n '/^[^/]*\/$/p'
folder/
other/
Run Code Online (Sandbox Code Playgroud)

如果您还需要"无根"文件,则更复杂:

sh$ $ tar tf f.tar | sed -n '/^.*\/$/p' | sort | cut -d '/' -f 1 | uniq
folder
other
yet
Run Code Online (Sandbox Code Playgroud)

sort不是在我的例子绝对必要的,但它可以帮助如果你有一个增量存档.