需求:
WinRAR可以為RAR/RAR5文件配置最多10%的恢復(fù)記錄:
以及查看這些記錄的大?。?br>
但是WinRAR是圖形界面的商業(yè)軟件?,F(xiàn)需要通過(guò)腳本對(duì)一棵目錄樹(shù)下的大量RAR文件做批量檢查,希望實(shí)現(xiàn):
- 從字符界面或者命令返回值(exit code,
%ERRORLEVEL%,$?)中讀取檢查結(jié)果, - 同時(shí)盡量避免使用
RAR.exe,而是使用UnRAR.exe完成任務(wù),因?yàn)楹笳呤?em>免費(fèi)軟件,遵循相對(duì)寬松的UnRAR license。
RAR.exe、UnRAR.exe、7z.exe/7za.eze等用于壓縮/解壓縮的命令行工具的用法均與舊式選項(xiàng)風(fēng)格的tar類似,即:
EXECUTABLE command [-option [-option ...]] input_file
其中command前不加-號(hào),且普遍為1個(gè)字母。
| 功能 | RAR.exe |
UnRAR.exe |
7z.exe |
tar[1] |
|---|---|---|---|---|
| 添加文件到壓縮包/tar包 | a |
a |
-r, --append |
|
| 創(chuàng)建(create)tar包文件 | -c |
|||
| 從壓縮包中刪除文件 | d |
d |
--delete |
|
| 解壓縮文件(不包含路徑) | e |
e |
e |
|
| 列出壓縮包的內(nèi)容 | l |
l |
l |
-t, --test |
| 測(cè)試壓縮包 | t |
t |
t |
[2] |
| 更新壓縮包內(nèi)的指定文件 | u |
u |
-u, --update |
|
| 詳細(xì)列出壓縮包的內(nèi)容 | v |
v |
||
| 解壓縮文件(包含完整路徑) | x |
x |
x |
-x, --extract, --get |
設(shè)置恢復(fù)記錄(recovery record)在壓縮包中的比例為N% |
rr[N] |
|||
設(shè)置恢復(fù)卷(recovery volume)的數(shù)量為N個(gè) |
rv[N] |
[1] tar的-c, -r, -t, -u, -x命令都需要通過(guò)-f指定tar包文件,而另外三個(gè)命令會(huì)自動(dòng)選擇input_file中的第一項(xiàng)作為要操作的壓縮包文件。
[2] 測(cè)試tar包完整性的方法有至少三種,參考:鏈接
- 嘗試列出文件,但不關(guān)心列出的文件,只看命令是否出錯(cuò):
tar -t -f file &> /dev/null; echo $? - 嘗試解開(kāi)tar包,同樣不關(guān)心解出的內(nèi)容,只看命令是否出錯(cuò):
tar -x --to-stdout -f file &> /dev/null; echo $? - 絕大多數(shù)tar包都會(huì)借助其他程序進(jìn)行壓縮(
.gz, .bz2, .xz, .lzma等),嘗試解壓縮。由于tar包本身不包含校驗(yàn)信息,因而我認(rèn)為這種方法是最不壞的方法。
回到正題:
RAR.exe和UnRAR.exe的l和v選項(xiàng)可以分別改寫(xiě)為l[t[a]|b], v[t[a]|b],其中:
-
t(technical)表示技術(shù)列表(每個(gè)文件若干個(gè)鍵值對(duì),每個(gè)鍵值對(duì)占一行) -
ta(technical, all)表示完整的技術(shù)列表(包含服務(wù)) -
b(bare)表示只列出文件名,類似于dir /b。vb兩個(gè)選項(xiàng)是矛盾的,效果與lb相同。 - 默認(rèn)情況下,
l/v選項(xiàng)以表格的形式列出壓縮包內(nèi)的文件
而這次要查看的恢復(fù)記錄就屬于RAR壓縮包內(nèi)的“服務(wù)”,通過(guò)unrar.exe l[b] input_file完全看不到:
C:\Program Files\WinRAR>UnRAR.exe l J:\3dm\3DMGAME-Age.of.Empires.II.Definitive.
Edition-CODEX\3DMGAME-Age.of.Empires.II.Definitive.Edition-CODEX.part01.rar
UNRAR 5.71 x64 免費(fèi)軟件 版權(quán)所有 (C) 1993-2019 Alexander Roshal
壓縮文件: J:\3dm\3DMGAME-Age.of.Empires.II.Definitive.Edition-CODEX\3DMGAME-Age.
of.Empires.II.Definitive.Edition-CODEX.part01.rar
詳情: RAR 4, 卷, 恢復(fù)記錄
屬性 大小 日期 時(shí)間 名稱
----------- --------- ---------- ----- ----
..A.... 250000000 2019-11-14 17:51 codex-age.of.empires.ii.definitive.edit
ion.rar
..A.... 250000000 2019-11-14 17:51 codex-age.of.empires.ii.definitive.edit
ion.s00
..A.... 250000000 2019-11-14 17:51 codex-age.of.empires.ii.definitive.edit
ion.s01
..A.... 250000000 2019-11-14 17:51 codex-age.of.empires.ii.definitive.edit
ion.s02
..A.... 250000000 2019-11-14 17:51 codex-age.of.empires.ii.definitive.edit
ion.s03
----------- --------- ---------- ----- ----
1250000000 卷 1 5
C:\Program Files\WinRAR>UnRAR.exe lb J:\3dm\3DMGAME-Age.of.Empires.II.Definitive
.Edition-CODEX\3DMGAME-Age.of.Empires.II.Definitive.Edition-CODEX.part01.rar
codex-age.of.empires.ii.definitive.edition.rar
codex-age.of.empires.ii.definitive.edition.s00
codex-age.of.empires.ii.definitive.edition.s01
codex-age.of.empires.ii.definitive.edition.s02
codex-age.of.empires.ii.definitive.edition.s03
通過(guò)unrar.exe lt input_file只能看到其有無(wú):
C:\Program Files\WinRAR>UnRAR.exe lt J:\3dm\3DMGAME-Age.of.Empires.II.Definitive
.Edition-CODEX\3DMGAME-Age.of.Empires.II.Definitive.Edition-CODEX.part01.rar
UNRAR 5.71 x64 免費(fèi)軟件 版權(quán)所有 (C) 1993-2019 Alexander Roshal
壓縮文件: J:\3dm\3DMGAME-Age.of.Empires.II.Definitive.Edition-CODEX\3DMGAME-Age.
of.Empires.II.Definitive.Edition-CODEX.part01.rar
詳情: RAR 4, 卷, 恢復(fù)記錄
名稱: codex-age.of.empires.ii.definitive.edition.rar
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:13,000000000
屬性: ..A....
CRC32: B399169C
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s00
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:16,000000000
屬性: ..A....
CRC32: 68F91F54
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s01
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:18,000000000
屬性: ..A....
CRC32: FE27D5DC
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s02
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:20,000000000
屬性: ..A....
CRC32: DFB8EABB
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s03
類型: 文件
大小: 250000000
壓縮后大小: 18126500
比率: -->
mtime: 2019-11-14 17:51:24,000000000
屬性: ..A....
Pack-CRC32: EF4773F2
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
而通過(guò)unrar.exe lta input_file則可以看到它的大?。ㄗ止?jié)數(shù))等信息:
C:\Program Files\WinRAR>UnRAR.exe lta J:\3dm\3DMGAME-Age.of.Empires.II.Definitiv
e.Edition-CODEX\3DMGAME-Age.of.Empires.II.Definitive.Edition-CODEX.part01.rar
UNRAR 5.71 x64 免費(fèi)軟件 版權(quán)所有 (C) 1993-2019 Alexander Roshal
壓縮文件: J:\3dm\3DMGAME-Age.of.Empires.II.Definitive.Edition-CODEX\3DMGAME-Age.
of.Empires.II.Definitive.Edition-CODEX.part01.rar
詳情: RAR 4, 卷, 恢復(fù)記錄
名稱: codex-age.of.empires.ii.definitive.edition.rar
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:13,000000000
屬性: ..A....
CRC32: B399169C
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s00
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:16,000000000
屬性: ..A....
CRC32: 68F91F54
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s01
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:18,000000000
屬性: ..A....
CRC32: FE27D5DC
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s02
類型: 文件
大小: 250000000
壓縮后大小: 250000000
比率: 100%
mtime: 2019-11-14 17:51:20,000000000
屬性: ..A....
CRC32: DFB8EABB
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: codex-age.of.empires.ii.definitive.edition.s03
類型: 文件
大小: 250000000
壓縮后大小: 18126500
比率: -->
mtime: 2019-11-14 17:51:24,000000000
屬性: ..A....
Pack-CRC32: EF4773F2
主機(jī) OS: Windows
壓縮: RAR 3.0(v20) -m0 -md=128K
名稱: RR
類型: 服務(wù)
大小: 30448996
壓縮后大小: 30448996
比率: 100%
mtime: 2019-11-14 10:32:34,000000000
屬性: .B
CRC32: F1930F9B
主機(jī) OS: Windows
壓縮: RAR 3.0(v29) -m0 -md=64K
服務(wù): EOF
旗幟: 卷 1
倒數(shù)第二項(xiàng)(名稱: RR,大小: 30448996)就是我們需要的信息了。
下一步:
libarchive(鏈接)及其Python調(diào)用