local fs=require("filesystem") local shell=require("shell") local text=require("text") local args,options=shell.parse(...) local function formatSize(size) if not options.h then return tostring(size) elseif type(size)=="string"then return size end local sizes={"","K","M","G"} local unit=1 local power=options.si and 1000 or 1024 while size>power and unit<#sizes do unit=unit+1 size=size/power end return math.floor(size*10)/10 ..sizes[unit] end local mounts={} if#args==0 then for proxy,path in fs.mounts()do if not mounts[proxy]or mounts[proxy]:len()>path:len()then mounts[proxy]=path end end else for i=1,#args do local proxy,path=fs.get(shell.resolve(args[i])) if not proxy then io.stderr:write(args[i],": no such file or directory\n") else mounts[proxy]=path end end end local result={{"Filesystem","Used","Available","Use%","Mounted on"}} for proxy,path in pairs(mounts)do local label=proxy.getLabel()or proxy.address local used,total=proxy.spaceUsed(),proxy.spaceTotal() local available,percent if total==math.huge then used=used or"N/A" available="unlimited" percent="0%" else available=total-used percent=used/total if percent~=percent then available="N/A" percent="N/A" else percent=math.ceil(percent*100).."%" end end table.insert(result,{label,formatSize(used),formatSize(available),tostring(percent),path}) end local m={} for _,row in ipairs(result)do for col,value in ipairs(row)do m[col]=math.max(m[col]or 1,value:len()) end end for _,row in ipairs(result)do for col,value in ipairs(row)do local padding=col==#row and 0 or 2 io.write(text.padRight(value,m[col]+padding)) end print() end