再帰的にソートされたRARアーカイブの作成

再帰的にソートされたRARアーカイブの作成

いくつかの理由で、圧縮されたtarの代わりにいくつかのデータを保存するためにRARアーカイブを使用することにしました。

1つだけを除いて、この決定に満足しています。ソートされたファイルを保存する方法が見つかりません。アーカイブを照会する予定であり、結果をソートする必要があるため、ファイルの順序は重要です。
私のファイル構造は次のとおりです。

2000/
  001.txt
  002.txt
  ...
2001/
  ...
2002/
...
2011/

したがって、フォルダは年を表し、その中のファイルには番号が付けられています。を使用するlsか、tar任意のプログラムで期待どおりにファイルを一覧表示します。非再帰的rarアーカイブを作成しようとすると (2000 フォルダー内のファイルのみ圧縮)、ファイルは順番に保存されますが、ファイルを再帰的に追加 ( ) しようとするとファイルが混乱しますrar a -r

以下以外はスイッチが見つかりません。

n@            Read file names to include from stdin

私はそれを手に入れることができませんでした。

次のように各ファイルを呼び出すことができますrar

for f in */*.txt ; do rar a -r archive.rar $f ; done

しかし、それはあまり賢明ではありません。

どんなアイデアがありますか?


以下の回答にコメントしたように、質問を更新したいと思います。

上記のあまり賢くない行と同様にソートされたファイルを保存しました。

for d in */ ; do rar a -r archive.rar $d*.txt ; done

もちろん、これは上記の特定のシナリオではうまく機能します。

n@スイッチの使い方をまだ見ていません。私は使うRAR 4.10 beta 5

ベストアンサー1

Ubuntuでrarを使う

(RAR 3.90ベータ2著作権(c)1993-2009 Alexander Roshal 2009年6月3日)

あなたができる最高のことは:

find * -type f | sort | xargs rar a ../eliezer.rar

これを使って解凍しました:

unrar x eliezer.rar

少なくとも、これはすべてのファイルに対してrarを呼び出すわけではありません。

-n@スイッチはファイルでのみ機能しているようです。たとえば、

find * -type f | rar a ../eliezer.rar -n@

CWDに通常のファイルがない場合は、「警告:ファイルなし」が生成されますが、

find * -type d | rar a ../eliezer.rar -n@ -r

ディレクトリに適用されます。

rar再帰スイッチ-rは、dirent構造体に表示される順序でファイル名を読み取ります。したがって、rarにパックされたファイルの順序を変更する唯一の方法は、rarを呼び出す前にディレクトリファイル構造内のファイルの順序(通常は生成順序)を操作することです。ディレクトリエディタを使用してこれを実行できますが、一部の種類のファイルシステムは、ガベージコレクションまたは最適化の一部としてディレクトリ構造のファイルの順序を変更できることに注意してください。

おすすめ記事