同じデフォルト名を持つディレクトリに抽出するには、tarを使用しますか?

同じデフォルト名を持つディレクトリに抽出するには、tarを使用しますか?

たとえば、zipファイルがありますmyArchive123.tar.gz。その中には次のフォルダが含まれています。helloWorld

以下を使用して抽出するとtar -xf myArchive123.tar.gzhelloWorld

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/"

関連情報