среда, 29 января 2014 г.

Скрипт копирования группы файлов из большого числа файлов

Возникла задача скопировать базу с одной файловой системы в другую. Общий размер 3.5 ТБ, 369 файлов. Массив параллельно не выдержит всего потока параллельно, а по одному долго писать. Написал сходу сценарий, который пишет по пять файлов параллельно, как только запишутся - запускает следующие пять.
Модернизировать можно до бесконечности. Здесь идея.


#!/bin/bash
SOURCEPATH=/dump/database/oradata/datafile
DESTPATH=/database/oradata/datafile

declare -a FILES

# /root/fil - список файлов сделанных заранее командой ls без путей, просто список файлов в столбик
FILES=(`cat /root/fil | 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 {1..5}; do
   #echo $n
   cfile=${FILES[$index]}
   echo $index "->" $cfile
   (echo "COPY $cfile"; cp -p $SOURCEPATH/$cfile $DESTPATH;) &
   let "index = $index +1"
 done
 wait

done

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