建立遞歸排序的 RAR 存檔

建立遞歸排序的 RAR 存檔

由於各種原因我決定使用 RAR 存檔來儲存一些數據,而不是壓縮 tar。

對這個決定很滿意,除了一件事:我找不到一種方法來儲存已排序的檔案。文件的順序很重要,因為我計劃查詢存檔並且結果應該排序。
我的文件結構是這樣的:

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@我還沒有找到如何使用switch。我用RAR 4.10 beta 5

答案1

在 Ubuntu 上使用 rar

(RAR 3.90 beta 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 結構中出現的順序讀取檔案名稱 (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 @

這對我有用的原因是我正在創建一個多部分存檔並將其上傳以進行備份。如果我只想要一個或兩個文件或資料夾,那麼我可以簡單地獲取相關部分並避免下載整個內容。確信內容將被正確分組。

相關內容