変数を介してtarにディレクトリ名を自動的に保存します。

変数を介してtarにディレクトリ名を自動的に保存します。

私はディレクトリが1つしか含まれていないtarballをダウンロードしました。このディレクトリの名前は非常に長いです。

tarballから抽出したら、ディレクトリ名を変更したいが、andをmkdir使用する以外の方法を好む。strip-components 1-C

私はそれについて考えましたが、コマンド置換が出力を保存するのに役立つと思う前mvに、ディレクトリ名を変数に自動的に保存することを好みました。
形はディレクトリ名ですが、どのようにtarball(または特定のディレクトリ)からのみ名前を選択できるかはわかりません。

コマンドの置き換えはどのように可能ですか?そうでない場合、代替は何ですか?

答え1

あなたの質問を正しく理解したかどうかはわかりませんが、次のようなものを探していると思います。

$ dir="$(tar tf archive.tar | cut -d / -f1 | uniq)"
$ echo "$dir"
tar-very-long-nime-very-very-long

答え2

以下は、現在ディレクトリのアーカイブで作業していると仮定します。

tar -x -f "$archivedir.tar"
mv "$archivedir" new-name

これは、変数にサフィックスのないアーカイブ名が含まれており、$archivedirこの名前がアーカイブが抽出されたときに作成されるディレクトリの名前でもあると仮定します。tar.tar

アーカイブを抽出し、生成されたディレクトリの名前を変更します。

tarアーカイブのファイル名があり、$tararchiveファイル名のサフィックスが.tar(値に含まれている$tararchive)場合:

tar -x -f "$tararchive"
mv "$(basename "$tararchive" .tar)" new-name

この"$(basename "$tararchive" .tar)"ビットはで置き換えることができます"${tararchive%.tar}"

答え3

GNU tarを使用すると、sedに似た式を使用してファイル名を変換できます。

tar -xf archive.tar.gz --xform='s,^very_long_name,short,'

もっと読むここ

関連情報