Files
opus-apps/compress/compress.lua
2020-06-01 16:54:28 -06:00

54 lines
1.0 KiB
Lua

local LZW = require('compress.lzw')
local Tar = require('compress.tar')
local Util = require('opus.util')
local fs = _G.fs
local shell = _ENV.shell
local TMP_FILE = '.out.tar'
local args = { ... }
local files = { }
if not args[2] then
error('Syntax: tar OUTFILE DIR')
end
local file = shell.resolve(args[1])
local dir = shell.resolve(args[2])
local filetype = 'tar'
if file:match('(.+)%.tar$') then
filetype = 'tar'
elseif file:match('(.+)%.lzw$') then
filetype = 'lzw'
end
local function recurse(rel)
local abs = fs.combine(dir, rel)
for _,f in ipairs(fs.list(abs)) do
local fullName = fs.combine(abs, f)
if fs.native.isDir(fullName) then -- skip virtual dirs
recurse(fs.combine(rel, f))
else
table.insert(files, fs.combine(rel, f))
end
end
end
recurse('')
if filetype == 'tar' then
Tar.tar(file, dir, files)
elseif filetype == 'lzw' then
fs.mount(TMP_FILE, 'ramfs', 'file')
Tar.tar(TMP_FILE, dir, files)
local c = Util.readFile(TMP_FILE)
fs.delete(TMP_FILE)
c = LZW.compress(c)
Util.writeFile(file, c)
end