Обновление архивов исходных кодов программ из систем контроля версий
Материал из Linux Wiki
Обычно исходники всяких программ, скачанных с различных CVS/SVN/GIT храню в архивах вида "название каталога.тип системы контроля версий.7z". Ниже скриптик, который распаковывает такие архивы, обновляет программу в соответствии с синтаксисом соответствующих утилит, после чего пакует архив назад под тем же именем. Может работать с отдельным архивом/архивами или каталогом (в последнем случае обновляются все найденные внутри архивы).
#!/bin/bash
# By Rain ;)
if [ -z "${1}" ]
then
echo -e "\e[5;31mError: Please, specify target archive or directory\e[0;0m"
exit 1
fi
find "${@}" -regextype posix-extended -type f -regex "[[:print:]]*\.(svn|cvs|git)\.7z" |
while read file
do
vcstype="$(sed -r 's/.*\.(.{3})\.7z$/\1/g' <<< ${file/*\//})"
mywd="${PWD}"
tmpdir="/tmp/vcsupdate.$RANDOM"
dirname="$(sed -r 's/(.*)\..{3}\.7z$/\1/g' <<< ${file/*\//})"
file="$(readlink -f "${file}")"
[ ! -e $tmpdir ] && mkdir $tmpdir || exit 1
echo -e '\e[35mExtracting files...\e[0m'
7z x "${file}" -o"${tmpdir}" 1>/dev/null
cd "${tmpdir}/${dirname}"
echo -e "\e[35mUpdating sources for \e[36m$file \e[35mfrom \e[36m$vcstype \e[35mrepository.\e[0m"
case ${vcstype} in
svn)
svn update;;
cvs)
cvs update;;
git)
git pull;;
esac
cd ..
echo -e "\e[31mRemoving old archive \e[36m$file\e[0m"
rm -f "${file}"
echo -e "\e[35mCompressing files\e[0m"
7z a -mx=9 "${file}" ${dirname} 1>/dev/null
echo -e "\e[31mRemoving old source files\e[0m"
cd "${mywd}"
rm -rf $tmpdir
echo -e "\e[36m$file \e[35mupdated successfully\e[0m"
done