前のピリオドなしで現在のディレクトリのtarアーカイブを作成します


10

私が次のことをすると:

tar czvf ../myarchive.tar.gz ./

自分のtarアーカイブに単一の(迷惑な)ルートフォルダーを取得します。

うるさい

アーカイブを作成するときにこのひどい期間を削除するにはどうすればよいですか?


このスタックオーバーフローの回答が役立つ場合があります。
n.st 2014

3
または使用--transform/ --xform、によって示唆されているようにマグナスtar -cf /path/to/output.tar -C /path/to/input-directory . --xform='s!^\./!!'
n.st

回答:


6

あなたはしません。

name=${PWD##*/}
cd ..
tar czf "$name.tar.gz" "$name"

(注:シェルで現在のディレクトリのシンボリックリンクトラッキングがオンになっていて、現在のディレクトリにシンボリックリンク経由でアクセスしている場合、これは機能しません。)

はい、これはあなたが尋ねたものではありませんが、これはあなたがすべきことです。現在のディレクトリにある多くのファイルを展開するアーカイブは煩わしいです。アーカイブをアンパックする各人にファイルのターゲットディレクトリを作成する負担がかかり、空でないディレクトリに誤ってそれらをアンパックした場合、それは困難です。掃除。ほとんどの場合、アーカイブは、その名前がアーカイブのベース名である単一のトップレベルディレクトリを作成する必要があります。


わかった。私が正しく思い出した場合、アーカイブを特定のディレクトリに解凍するために追加の手順を実行する必要があるのは本当に面倒です(例:tar xzvf archive.tar.gz && mv archive/* /outputvs unzip archive.zip -d /output
Naftuli Kay

9

ドットが表示されるのtarは、引数で指定した方法でパス構造を作成するためです。だからあなたが与えたようにソースとして、アーカイブも同じ構造で作成されます。

あなたはこれを試して確認することができます:

tar -czvf ../myarchive.tar.gz *

n.stによるコメントの助けを借りて回答を更新する

tar --xform s:'./':: -czvf ../myarchive.tar.gz ./

1
*グロブは隠しファイルと一致しません。
n.st 2014

:Dええと..初心者..実現しなかった
2014

さらにbashグロブを使用して隠しファイルを含めることもできます— こちらをご覧ください
n.st 2014

0

前に^を追加することをお勧めします。

tar --xform s:'^./':: -czvf ../myarchive.tar.gz ./

または、「/」が完全パス名の末尾でない限り、アーカイブ内の完全パス名の「/」はすべて削除されます。


1
別の回答を投稿する代わりに、その回答の編集を提案してください:unix.stackexchange.com/posts/144094/edit
muru
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.