圧縮ファイルの最上位ディレクトリ名を取得するコマンド

圧縮ファイルの最上位ディレクトリ名を取得するコマンド

ファイル名は次のとおりですが、ディレクトリはlibgit2-0.21-1ですtar xvf v0.21.1.tar.gz。次に、単一のライナーを使用してディレクトリ名を取得する方法(ディレクトリが3つ以上の場合はエラーが報告されます):

tar tvf v0.21.1.tar.gz | head
drwxrwxr-x root/root         0 2014-08-05 08:09 libgit2-0.21.1/
-rw-rw-r-- root/root      1169 2014-08-05 08:09 libgit2-0.21.1/.HEADER
-rw-rw-r-- root/root        22 2014-08-05 08:09 libgit2-0.21.1/.gitattributes
-rw-rw-r-- root/root       321 2014-08-05 08:09 libgit2-0.21.1/.gitignore
-rw-rw-r-- root/root      1246 2014-08-05 08:09 libgit2-0.21.1/.mailmap

これには解決策がありますが、明らかにこれが最善の解決策ではありません。また、上部に複数のディレクトリがあることを確認する必要があります。

mkdir libgit2 && tar xvf v0.21.1.tar.gz -C libgit2 --strip-components 1

ベストアンサー1

tarballをコマンドライン引数として使用して、次のスクリプトを実行します。

#!/bin/bash

DIR=$(tar tvf ${1} | egrep -o "[^ ]+/$")

if [ $(echo ${DIR} | egrep -o " " | wc -l) -eq 0 ]; then
    echo ${DIR};
else
    echo "ERROR: multiple directories in tarball base"
    exit 1
fi

おすすめ記事