Пакетная перепаковка архивов в 7z: различия между версиями

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
 
(не показана 1 промежуточная версия этого же участника)
Строка 3: Строка 3:
----
----
<source lang="bash">
<source lang="bash">
7zit() {
#!/bin/bash
find "${1}" -regextype posix-extended -regex ".*\.(bz2|gz|tar\.bz2|tar.gz)" |
 
if [ -z "${1}" ]; then
echo "Error: Missing Path"
exit 1
fi
 
recompress() {
echo "Working on ${file}"
"${decompressor}" -c "${file}" |
7z a -si "${file%.*}.7z" 1>/dev/null && rm -f "${file}"
}
 
find "${@}" -regextype posix-egrep -regex ".*\.(bz2|gz|tgz|tbz|tbz2)$" |
while read file
while read file
do
do
if [ "${file##*.}" == "bz2" ]
filetype="$(file -b "${file}" | cut -d' ' -f1)"
then
if [ ! -e "${file%.*}.7z" ]; then
bunzip2 "${file}"
if [ "${filetype}" == 'bzip2' ];then
decompressor='bunzip2'
recompress
elif [ "${filetype}" == 'gzip' ];then
decompressor='gunzip'
recompress
else
else
gunzip "${file}"
echo "Unknown archive type"
fi &&\
fi
7z a -mx=9 "${file%.*}.7z" "${file%.*}" &&\
else
rm -f "${file%.*}"
echo "Error: File exist"
fi
done
done
}
}
</source>
</source>


[[Category:Shell-функция]][[Category:Скрипт]]
[[Category:Скрипт]]

Текущая версия на 12:56, 2 июня 2009

Функция делает поиск bz2, gz, tar.bz2 и tar.gz архивов в указанном каталоге и перепаковывает их в 7z. Можно, например, периодически натравливать ее на каталог с выкачиваемыми патчами для Linux-ядра.


#!/bin/bash

if [ -z "${1}" ]; then
echo "Error: Missing Path"
exit 1
fi

recompress() {
echo "Working on ${file}"
"${decompressor}" -c "${file}" |
7z a -si "${file%.*}.7z" 1>/dev/null && rm -f "${file}"
}

find "${@}" -regextype posix-egrep -regex ".*\.(bz2|gz|tgz|tbz|tbz2)$" |
while read file
do
filetype="$(file -b "${file}" | cut -d' ' -f1)"
if	[ ! -e "${file%.*}.7z" ]; then
	if	[ "${filetype}" == 'bzip2' ];then
			decompressor='bunzip2'
			recompress
	elif	[ "${filetype}" == 'gzip' ];then
			decompressor='gunzip'
			recompress
	else
			echo "Unknown archive type"
	fi
else
	echo "Error: File exist"
fi
done
}