Extracting Files Guide
Concepts
Extraction decompresses and saves files from archives to disk. Different formats require different commands but follow similar patterns.
By Format
CAB files
# Extract all files
cabriolet extract archive.cab
# Extract to specific directory
cabriolet extract archive.cab output/
# Verbose output
cabriolet extract --verbose archive.cabRuby API:
decompressor = Cabriolet::CAB::Decompressor.new
cabinet = decompressor.open('archive.cab')
decompressor.extract_all(cabinet, 'output/')CHM files
cabriolet chm-extract help.chm output/Ruby API:
decompressor = Cabriolet::CHM::Decompressor.new
chm = decompressor.open('help.chm')
chm.all_files.each do |file|
next if file.system_file?
decompressor.extract(file, "output/#{file.filename}")
endSZDD files
# Auto-detect output name
cabriolet expand file.tx_
# Specify output
cabriolet expand file.tx_ file.txtRuby API:
decompressor = Cabriolet::SZDD::Decompressor.new
header = decompressor.open('file.tx_')
decompressor.extract(header, 'file.txt')KWAJ Files
cabriolet kwaj-extract setup.kwj setup.exeRuby API:
decompressor = Cabriolet::KWAJ::Decompressor.new
header = decompressor.open('setup.kwj')
decompressor.extract(header, 'setup.kwj', 'setup.exe')HLP Files
cabriolet hlp-extract help.hlp output/Ruby API:
decompressor = Cabriolet::HLP::Decompressor.new
header = decompressor.open('help.hlp')
decompressor.extract_all(header, 'output/')LIT Files
# Check for DRM first
cabriolet lit-info book.lit
# Extract if not encrypted
cabriolet lit-extract book.lit output/Ruby API:
decompressor = Cabriolet::LIT::Decompressor.new
header = decompressor.open('book.lit')
unless header.encrypted?
decompressor.extract_all(header, 'output/')
endOAB Files
# Full file
cabriolet oab-extract full.oab address.dat
# Incremental patch
cabriolet oab-extract --base=old.oab patch.oab new.oabRuby API:
decompressor = Cabriolet::OAB::Decompressor.new
# Full file
decompressor.decompress('full.oab', 'address.dat')
# Patch
decompressor.decompress_incremental('patch.oab', 'old.oab', 'new.oab')Common patterns
Batch Extraction
# Extract all CAB files
for file in *.cab; do
cabriolet extract "$file" "extracted/$(basename "$file" .cab)"
done