Тема актуальна, актуальна и обратная задача - есть архив и немного свободного пространства, известно, что остатка свободного пространства + место занимаемое архивом достаточно для распакованного содержимого архива - как распаковать не прибегая ко внешним хранилищам ?
запаковка вариант (предложите без временных)
#!/bin/sh
file=$1
[ ! -f ${file} ] && exit
prefix=${file}.$$
x=0
size=`wc -c ${file} | cut -d' ' -f1`
split=$((1024 * 1024 * 32))
x=$((${size} / ${split} + 1))
m=${x}
while [ ${size} -ge ${split} ]; do
tail -c ${split} ${file} > ${prefix}.`printf '%010d' ${x}`
size=$((${size} - ${split}))
truncate -s -${split} ${file}
echo $(( ${m} - ${x} )) 1>&2
x=$((x-1))
done
mv ${file} ${prefix}.`printf '%010d' ${x}`
echo "START GZIP ${file}..."
for x in ${prefix}.*; do
cat ${x}
rm ${x} > /dev/null || {
echo ${x} 1>&2
break
}
m=$((${m} - 1))
echo ${m} 1>&2
done | gzip -c > ${file}.gz
Я конечно далек от мысли... (с)