たとえば、zipファイルがありますmyArchive123.tar.gz
。その中には次のフォルダが含まれています。helloWorld
以下を使用して抽出するとtar -xf myArchive123.tar.gz
:helloWorld
ls
myArchive123.tar.gz
helloWorld
出力がファイル名から拡張子を引いたものと同じになりたいです.tar.gz
。つまり:
tar <magic paramaters> myArchive123.tar.gz
ls
myArchive123.tar.gz
myArchive123
cd myArchive123
ls
helloWorld
これは可能ですか?
- 私はアーカイブに何があるのか分かりません。フォルダでも複数のファイルでもかまいません。
- tarができない場合は、他のツールを使用できます。
- スクリプトに変換できるより長い形式も問題ありません。
編集する
その間、私はそれをやっているように見えるスクリプトを自分で書いていました(下記の回答を参照)。最も重要なことは、1行のコードでパッケージ化する必要があるということです。たとえば、次のようになります。
extract <file>
答え1
$ tar -xf myArchive123.tar.gz --one-top-level
--トップレベル[= DIR]
すべてのファイルをDIRとして抽出するか、引数なしで使用する場合は、アーカイブのデフォルト名(--auto-compressで認識される標準の圧縮サフィックスの減算)に沿って名前付きサブディレクトリに抽出します。
答え2
を使用するには、各ファイル名の前に(or)を付けるgnu tar
ことができます。--xform
--transform
/prefix/
tar -xf myArchive.tar.gz --xform='s|^|myArchive/|S'
/
先行がなく、prefix/
式はファイル名変換からシンボリックリンクターゲットを除外することで終わりますsed
。テストしてみてください(模擬実行)。S
tar -tf myArchive.tar.gz --xform='s|^|myArchive/|S' --verbose --show-transformed-names
始めるのに役立つように呼び出すことができる非常に簡単なスクリプトは次のとおりですextract <file>
。
STRIP=${1%.*} #最後のサフィックスを削除 名前=${STRIP%.tar} #strip。アスファルトサフィックス(存在する場合) tar -xf "$1" --xform="s|^|$NAME/|S" # コマンドの実行
答え3
まあ、少なくともいくつかのステップを踏むだけで可能です。そうすれば
mkdir <archive name>
tar -xf <archive name>.tar.gz --strip-components=1 -C <archive name>
より簡潔な回答があるかもしれませんが、これで作業が完了します。
答え4
--transform
別の考えられる解決策は、次のオプションを使用することです。
tar -xzf ARCHIVE_NAME.tgz --transform="s/OLD_DIR_NAME/ARCHIVE_NAME/"
ファイルとして:
tar -xzf myArchive123.tar.gz --transform="s/helloWorld/myArchive123/"