ファイル名は次のとおりですが、ディレクトリは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