私はディレクトリが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,'
もっと読むここ。