ファイルをコピーせずに別のディレクトリからtarファイル


10

これは、ここの専門家にとって非常に簡単なはずです。

6GBのユーザーディスククォータを持つLinuxアカウントを持っています。/opt圧縮すると1GB になると約3GBのデータが入ったデータフォルダがいくつかあります。にはいくつかのシンボリックリンクがありますdata-folder。通常、仕事のバックアップを取るために、私は次のことをしていました。

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

これで、ユーザーのディスククォータで既に2.5 GBを消費しています。家にファイルをコピーするのに十分なスペースがありますが、家にはコピーできませんtar

パイプを使用するなどして、単一のコマンドでフォルダーをtarしてコピーする方法はありますか?

PSへの/opt読み取りアクセスしか持っていないため、tarで読み込むことができません/opt


あなたは確かに/ optでtarすることができます、そこに書くことはできません、それだけです。tar(3)への「f」フラグは、結果をそのファイルに保管することを示しています。すなわち、cd /opt; tar zcf $HOME/junk.tar.gz junk
フォンブランド2013年

回答:


5

tarに必要なファイルが存在する場所から離れてtarファイルを作成しますか?

これを行うには多くの方法があります。

ローカルで作成する場合(=同じマシン上):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

そのコマンドの最後に、追加のファイルまたはディレクトリをtarに追加できます。

リモートで作成する場合(つまり、風袋引きするデータを含むホストからリモートホストにtarファイルを作成する場合):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

後のバージョンは非常に用途が広いです。たとえば、同じ手法を使用して、ディレクトリ+サブディレクトリを「複製」することもできます。

ディレクトリ+サブディレクトリを別のローカルディレクトリに複製します。

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

ディレクトリ+サブディレクトリを別のリモートディレクトリに複製します。

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

ファイルがtarで圧縮されている(またはuntarされている)ため、ファイルを表示する必要がない場合は、「v」をドロップします。これにより、速度は大幅に向上しますが、エラーが発生しない限り、あまり意味がありません。

ソースに「。/ ...」を使用して、tarにRELATIVEパスとして保存させます。場合によっては、追加のパス情報を追加する必要があります。

たとえば、/ etc内のファイルを含むcrontabファイルをtarするには、次のようにします。

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

私は意図的に相対パスを使用しています:tarの古いバージョンは危険で、元のGLOBALパスを持つファイルを抽出する可能性があります。つまりcd /safedir ; tar xvf sometar、/ safedirの外側にある元のパスにあるグローバル名のファイルでファイルを上書きします。その下にはありません!古いプロダクションサーバーが存在するため、非常に危険です。最近のtarを使用している場合でも、常に相対パスを使用するほうがよいでしょう。


タールの違いについてではなく、別のもの:の-cvf代わりに使用する必要があるものもあればcvf-スタイルを認識しないものもあります。そして、z「『圧縮』で圧縮」を意味するために使用されるが、「最近の」タールには「gzipで圧縮」を意味します。次のようにして、ファイルで使用されている圧縮を確認できます file zefile。そして、それに応じて名前を変更します(tarがを使用している場合は、compress.tar.gzではなく.tar.Zに名前を変更する必要があります)
Olivier Dulac

0

-htarオプションを使用します。manページから:

-h, --dereference
don't archive symlinks; archive the files they point to

だからあなたは使うことができます tar -zcvfh data-folder.tar.gz /opt/data-folder


ああ、私はそれについて言及すべきだったのですが、すでにtar -zcvfh〜/ data-folder.tar.gz / opt / data-folderを試しました。ある種の循環アーカイブの問題に陥っています。私はいくつかのファイルをコピーし続け、決して終わりません。
Kamath

データのサブフォルダーに循環シンボリックリンクがあるようです。
Kamath

2
@AUZKamath、それはGNU tarのバグです。あなたは試してみたいことがありますbsdtar代わりに、またはpaxcd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gzループを検出してくれた)
ステファンChazelas

1
@AUZKamath tar -rf <tarfilename> <filename>既存のtarファイルに追加するために、ホームディレクトリからファイルのtarと削除を同時に行うことができます。
harish.venkat

1
@Stephane Chazelas、それはあなたが答えとしてそれを置くべきです。
Kamath
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.