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

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

さまざまな理由から、圧縮された tar ではなく、RAR アーカイブを使用してデータを保存することにしました。

決定には満足していますが、1 つだけ問題があります。ファイルを並べ替えて保存する方法が見つかりません。アーカイブをクエリして結果を並べ替える予定なので、ファイルの順序は重要です。
私のファイル構造は次のようになります。

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

したがって、フォルダーは年を表し、内部のファイルには番号が付けられます。lstarまたは任意のプログラムを使用すると、期待どおりにファイルが一覧表示されます。 非再帰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 beta 2 Copyright (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 構造体 (man readdir) に現れる順序で読み取ります。したがって、rar がファイルをパックする順序を変更する唯一の方法は、rar を呼び出す前に、ディレクトリ ファイル構造内のファイルの順序 (通常は作成順序) を操作することです。これはディレクトリ エディターで行うことができますが、一部のファイル システム タイプでは、ガベージ コレクションまたは最適化の一環として、ディレクトリ構造内のファイルの順序が変更される可能性があることに注意してください。

答え2

rar がデータをどのように「保存」するかを本当に気にしますか?適切にソートされたリストは提供され
ないのですか?unrar v archive.rar |sort

答え3

質問に記載されているのと同様の問題があり、次の解決策を思いつきました。

for d in *; do find "${d}/" -type f | sort | rar a "${d}.rar" @; done
  1. すべてのディレクトリを一覧表示します (そのフォルダー内のディレクトリのみ)
  2. いずれかのディレクトリ内のすべてのファイルを一覧表示する
  3. 選別
  4. 罪悪感なく@を使用する

答え4

これに関する情報は非常に少ないようです。しかし、この質問は、それでもやり方を理解するのに役立ちました。そこで、将来検索する人のために、ここでプロセスを投稿します。

によると:http://acritum.com/winrar/console-rar-manual

RAR command line syntax:
RAR <command>  [ -<switches> ]  <archive>  [ <@listfiles…> ]
[ <files…> ]  [ <path_to_extract\> ]

Listfiles are plain text files that contain names of files to process.
File names should start at the first column. It is possible to
put comments to the listfile after // characters. For example,
you may create backup.lst containing the following strings:

c:\work\doc\*.txt         //backup text documents
c:\work\image\*.bmp       //backup pictures
c:\work\misc

and then run:

rar a backup @backup.lst

If you wish to read file names from stdin (standard input),
specify the empty listfile name (just @).

Win32 console RAR uses OEM (DOS) encoding in list files.

You may specify both usual file names and list files in the same
command line. If neither files nor listfiles are specified,
then *.* is implied and RAR will process all files

したがって、プロセスは次のようになります。

  1. アーカイブ元となる場所のルートに変更するか、絶対パスを使用します。ただし、絶対パスもアーカイブに含まれることに注意してください。
  2. そしてリストファイルを作成します

    find topFolderOfTarget -type f | sort > listFile.txt

  3. 次に@listfile.txtでrarを実行します。

    rar a archiveName @listFile.txt

あるいは、リスト ファイルの作成をスキップすることもできます。

find topFolderOfTarget -type f | sort | rar a archiveName @

これが私にとって便利だったのは、マルチパート アーカイブを作成し、バックアップ用にアップロードしていたからです。必要なのは 1 つか 2 つのファイルまたはフォルダーだけであれば、関連する部分だけを取得すればよく、全体をダウンロードする必要はありません。コンテンツが適切にグループ化されることは間違いありません。

関連情報