tar -czvf subdir.tgz subdirectory/*
を使用してサーバAでtarアーカイブを作成したとします。私がこのtarballをコピーしたサーバーB上で並列構造を持っていて、そのサブディレクトリ内のtarアーカイブに存在しないファイルを削除することを含めて、同じサブディレクトリをクローバーしたい場合 - cd
intoサーバーBの親ディレクトリ、rm -rf subdirectory
、次にtar -xzvf subdir.tgz
です。tarアーカイブを展開するときにディレクトリ構造を削除します
最初にrm
を実行しなくてもこれを行う方法はありますか?
テストとして私はサーバBの中にsubdirectory/dummy/
のダミーディレクトリを置き、tar -xzvf subdir.tgz --recursive-unlink
を実行しましたが、驚いたことに、subdirectory/dummy/
はまだそこにありました。 --recursive-unlink
は何を誤解しているのでしょうか?
編集========== ここに例を示します。私は2つの異なるサーバー上の2つの "ミラーリング"ディレクトリを表す2つのディレクトリを作成します(サーバー 'a'とサーバー 'b'と考える)。コピー先のディレクトリ( 'b')では、tarアーカイブに存在しない追加のディレクトリといくつかのファイルを作成します。これらは私が詰まって取り除かれることを期待しています。基本的に、私がディレクトリ 'a'からのファイルです。しかし、例からわかるように、--unlink-first
と--recursive-unlink
にもかかわらず、余分なディレクトリとファイルはuntarの後にまだそこにあります。
-bash-3.2$ mkdir tartest
-bash-3.2$ cd tartest
-bash-3.2$ mkdir a
-bash-3.2$ mkdir b
-bash-3.2$ cd a
-bash-3.2$ mkdir xyz
-bash-3.2$ cd xyz
-bash-3.2$ touch test.1
-bash-3.2$ touch test.2
-bash-3.2$ cd ../
-bash-3.2$ touch test.3
-bash-3.2$ cd ../b
-bash-3.2$ mkdir abc
-bash-3.2$ cd abc
-bash-3.2$ touch test.4
-bash-3.2$ cd ../../a
-bash-3.2$ tar cvf ../archive.tar ./*
./test.3
./xyz/
./xyz/test.2
./xyz/test.1
-bash-3.2$ cd ../b
-bash-3.2$ tar -xf ../archive.tar --unlink-first --recursive-unlink
-bash-3.2$ ls
total 16K
drwxr-xr-x 4 iponly168797 iponly168797 4.0K Jan 27 13:58 .
drwxr-xr-x 4 iponly168797 iponly168797 4.0K Jan 27 13:57 ..
drwxr-xr-x 2 iponly168797 iponly168797 4.0K Jan 27 13:56 abc
-rw-r--r-- 1 iponly168797 iponly168797 0 Jan 27 13:56 test.3
drwxr-xr-x 2 iponly168797 iponly168797 4.0K Jan 27 13:56 xyz
-bash-3.2$ ls xyz
total 8.0K
drwxr-xr-x 2 iponly168797 iponly168797 4.0K Jan 27 13:56 .
drwxr-xr-x 4 iponly168797 iponly168797 4.0K Jan 27 13:58 ..
-rw-r--r-- 1 iponly168797 iponly168797 0 Jan 27 13:56 test.1
-rw-r--r-- 1 iponly168797 iponly168797 0 Jan 27 13:56 test.2
私はテスト/サブディレクトリを作成し、メインサブディレクトリのtest1.txtファイルに触れてから--recursive-unlinkと--unlink-firstを使い、test /ディレクトリとtest1.txtファイルの両方をそのディレクトリ構造にはSTILLがあります。だから私はこの答えが正しいとは思わない。 –
@TomAuger:返信を更新しました。 –
私はTAR(1)を使用しています。 –