web-dev-qa-db-ja.com

更新されたtarballから古いファイルを抽出/削除する方法

test.tarという名前のtarballがあります。これは、次のコマンドを実行して最初に作成しました。

echo start > 1
tar -cf test.tar 1

そしてそれを更新しました:

echo end > 1
tar -uf test.tar 1

このtarアーカイブ内のファイルのリストを取得した場合:

$ tar -tx test.tar

それは私に与えます:

1
1

これらのファイルの内容を確認しようとすると、次のようになります。

$ tar -xOf test.tar

start
end

そして最後に私がそれを抽出したいとき:

$ tar -xf test.tar 1
$ cat 1
end

とにかく古いバージョンの1を抽出することはできますか? (startを含むもの)。

もう1つは、これらのファイルを削除することです。--deleteパラメーターを使用すると、その名前のすべてのファイルがアーカイブから削除されます。古いものまたは新しいものだけを削除するにはどうすればよいですか?

3
Ravexina

から ここ

--occurrence[=number]

このオプションは、ファイルのリストがコマンドラインまたは--deleteオプションを介して指定されている場合に、サブコマンド> --diff--extract--list、または-Tのいずれかと組み合わせて使用​​できます。

このオプションは、各名前付きファイルの出現回数のみを処理するようにtarに指示します。番号のデフォルトは1なので、

tar -x -f archive.tar --occurrence filename

メンバーfilename' from >archive.tar 'の最初のオカレンスを抽出し、アーカイブの最後までスキャンせずに終了します。

したがって、古いバージョンを抽出するには、次を使用します。

tar -xf test.tar --occurrence=1 1

そして削除の実行のために:

tar --delete -f test.tar --occurrence=1 1

両方のバージョンを抽出する別の回避策は、単に--backupスイッチを使用することです。

tar -xf test.tar --backup

次のようにファイルを抽出します。

1
1~

どの1~が古いものです。 2つ以上のバージョンを入手した場合は、代わりに--occurrenceスイッチを使用してください。

-wを使用してtarインタラクティブモードを使用することもできます。

tar -xf test.tar -w

今回はtarが各アクションを要求しますが、y/nによって抽出する最初のバージョンまたは最後のバージョンを選択できます。

3
Ravexina