среда, 9 июля 2014 г.

Сценарий копирования тучи файлов небольшими группами. v1

Иногда нужно скопировать гору файлов, но небольшими группами, что не перегрузить систему ввода-вывода или не напрягать соседние процессы на сервере.
Вот скрипт для такой работы. Установить переменные откуда, куда и группами по сколько файлов.
Недостаток скрипта в том, что если файлы разного размера то скрипт не добавляет новые копирования пока вся группа не закончит копироваться. Если файлы одинаковые по размеру, то будет ровная работа.

#!/bin/bash
SOURCEPATH=/db1/fs0/vdb1_1.dir
DESTPATH=/tt/fs0
#GRP - count files of group
declare -i GRP=50

if ! [ -d $DESTPATH ]; then
 echo "No destination directory $DESTPATH"
 exit 1
fi
if ! [ -d $SOURCEPATH ]; then
 echo "No source directory $SOURCEPATH"
 exit 1
fi

declare -a FILES
FILES=(`ls ${SOURCEPATH} | tr '\n' ' '`)
#echo ${FILES[@]}
file_count=${#FILES[*]}
echo $file_count...

index=0
while [ "$index" -lt "$file_count" ]
do
 #echo ${FILES[$index]}

 echo "----------------------------"
 for n in $(seq 0 $GRP); do
   echo $n
   cfile=${FILES[$index]}
   #echo $index "->" $cfile
   (echo "COPY $cfile"; cp -p $SOURCEPATH/$cfile $DESTPATH;) &
   let "index = $index +1"
 done
 wait

done

Комментариев нет: