web-dev-qa-db-ja.com

ディレクトリ構造なしのtar圧縮

現在のディレクトリの下に、2つのサブディレクトリがあります。

dir_1/
   - file1.png
   - file2.png
   ...
   - fileN.png

dir_2/
   - fileA.txt
   - ...
   - fileZ.txt

2つのディレクトリをtarで圧縮すると、次のようになります。

tar -cvzf result.tar.gz dir_1/ dir_2/ 

result.tar.gzを取得しましたが、ディレクトリ構造は維持されています。 result.tar.gzを抽出すると、dir_1dir_2再び。

ディレクトリ構造が残らないようにtar圧縮するにはどうすればよいですか。つまり、tar.gzファイルを抽出すると、ファイルのみが取得されます。

result/
   file1.png 
   ... 
   fileN.png 
   fileA.txt
   ...
   fileZ.txt
8
user842225

-Cオプションでこれができると思います。

Tarのmanページから:

-C directory, --cd directory, --directory directory
    In c and r mode, this changes the directory before adding the following files.
    In x mode, change directories after opening the archive but before extracting
    entries from the archive.

つまり、実行できるはずです

tar cvzf result.tar.gz -C /path/to/dir1/ . -C /path/to/dir2/ .

あなたが望むものを達成するために。

11
arnefm

GNU tarを使用すると、--transformオプションを使用して、ファイルをアーカイブに追加またはアーカイブから抽出するときにファイル名を書き換えることができます。BSDtarまたはpaxでは、オプション-sも同じことを行います。

先頭のディレクトリコンポーネントを削除するには(dir_1/subdir/somefilesubdir/somefileとして格納されるようにするため):

tar -czf result.tar.gz --transform '!^[^/]*/!!' dir_1 dir_2

すべてのディレクトリコンポーネントを削除するには(dir_1/subdir/somefilesomefileとして格納されるように):

tar -czf result.tar.gz --transform '!^.*/!!' dir_1 dir_2