web-dev-qa-db-ja.com

tarアーカイブに追加した後にファイルを削除する

GNU tarは多くのファイルをアーカイブに追加し、追加された各ファイルを削除できますか?

これは、tarアーカイブ全体と元のファイルの両方を保持するのに十分なディスクスペースがない場合に便利です。したがって、通常の方法でアーカイブを作成した後にファイルを単純に手動で削除することはできません。

45
Rory

GNU tarの場合、 option--remove-files

67
Fred Foo

タスクがありました-ファイルをアーカイブしてから、GNUオプションなしでインストールされた「tar」をOSに削除しました。

方法:

「xargs」を使用

ファイルがあるディレクトリがあるとします。
1週間かけてすべてのファイルをtarに移動して削除する必要があります。
1つのアーカイブ(arc.tar)を実行し、ファイルを追加しました。 (試行ごとに新しいアーカイブを作成できます)

溶液:

find ./ -mtime +7 | xargs -I % sh -c 'tar -rf arc.tar % ; rm -f %'
3

Non GNU tarの場合、「-u」を使用して、ループ内のファイルごとにファイルを処理できます。

tar -cf archive.tar afile
for myfile in dir/*.ext
do
    tar -uf archive.tar $myfile && rm $myfile || echo "error tar -uf archive.tar $myfile"
done
2
E D

最初に解凍せずにbzip2アーカイブにファイルを追加できるかどうかはわかりません。しかし、ここに私の頭に浮かんだ1つの解決策があります(擬似的なアルゴリズムを提供します):

1. For each [file] in [all small files]
    1.1 compress [file] into [file].bz2
    1.2 (optionally verify the process in some way)
    1.3 delete [file]
2. For each [bzfile] in [all bzip files from step 1]
    2.1 append to tar (tar rvf compressedfiles.tar [bzfile]
    2.2 (optionally verify the process in some way)
    2.3 delete [bzfile]

これで、bzip2:edファイルを個別にすべて含むすべてのファイルを含むtarファイルが作成されます。問題は、bzip2が個々のファイルに追加するオーバーヘッドの量です。これをテストする必要があります。

0
Tobbe