четверг, августа 24, 2006

скрипт для получения информации о размере файлов для закачки

#!/bin/sh
# getsize.sh - скрипт для получения информации о размере файлов для закачки
#
# Запуск: ./getsize.sh [sum] [файл со ссылками|URL]
#
# Запуск с параметром "sum" выдает также общий объем файлов.
# Файл со ссылками может содержать быть как прямые ссылки на файлы,
# так и маски вида ftp://ftp.freebsd.org/pub/FreeBSD/tools/*
# (размер файлов в подкаталогах не учитывается)
# Для корректной работы скрипта требуется wget.
#
# Примеры:
# ./getsize.sh sum http://some.com/some.file.tgz http://some2.com/file.xxx
# ./getsize.sh links.txt
#
if [ -z "$1" ]; then
exit
fi
SUM=0
TMPFILE=`mktemp -q /tmp/getsize.XXXXXX`
TMPFILE1=`mktemp -q /tmp/getsize.XXXXXX`
# проверяем входные параметры
IN=$1
if [ "${IN}" = "sum" ]; then
IN=$2
fi
if [ `echo ${IN} | grep "\:\/\/"` ]; then
IN="${TMPFILE}"
printf "$*" | sed "s/sum //g" > ${IN}
fi
for i in `cat ${IN}`
do
if [ `echo "${i}" | grep "\*"` ]; then
# найдена маска, скачиваем содержимое каталога
wget -nr -R "*" ${i} > /dev/null 2>&1
cat ./.listing | grep -v "^d" | grep "-"| awk '{print $9, $5}' | sed "s/ /-----/g" > ${TMPFILE1}
for j in `cat ${TMPFILE1}`
do
name=`echo ${j} | awk -F"-----" '{print $1}'`
size=`echo ${j} | awk -F"-----" '{print $2}'`
X=`echo ${i} | sed "s/\*//g"`
echo "${X}${name} ${size}"
SUM=`expr ${SUM} + ${size}`
done
rm ./.listing
rm ${TMPFILE1}
else
# обычная ссылка
s=`fetch -s ${i}`
echo "${i} ${s}"
SUM=`expr ${SUM} + ${s}`
fi
done
if [ "$1" = "sum" ]; then
echo "Total ${SUM}"
fi
# удаляем временный файл
rm ${TMPFILE} > /dev/null 2>&1
exit