Апр 212011
 

На работе понадобился скрипт, для копирования в нужные директорию определенного файла, директорий много!

#!/bin/bash -vx
### BEGIN INIT INFO
DIR="/home/bagas/Видео/"
SOR="/home/bagas/doc/АКТ п Фарммед.doc"
TITLE='Копирование завершенно'
DATE=`date +"%Y-%m-%d"`
FINDS="`find /home/bagas/Видео -type f -name '*.doc'`"
NUM_MV=0
NUM_CP=0
### END INIT INFO

# Поехали !
IFS=$'\n'
    for f in $FINDS;
do
unset IFS
             n=`echo "$f" | cut -f1 -d .`
             n1=`dirname "$f"`
             mv -n "$f" "$n1/$DATE.doc"
             let "NUM_MV += 1"
done
    for i in $( ls $DIR | grep [0-9] );
do
             src=$i
             mkdir -p "$DIR$src/S"
             cp "$SOR" "$DIR$src/S"
             let "NUM_CP += 1"
done
    sh /root/sm "$TITLE".Общее количество файлов переименовано >>"$NUM_MV"<<, общее количество файлов с копировано >>"$NUM_CP"<<.
exit 1
##############
Теперь разберем его подробно.
Это переменные
### BEGIN INIT INFO
DIR="/home/bagas/Видео/"  
#диреткория названчения, в ней будет искаться под директории
SOR="/home/bagas/doc/АКТ п Фарммед.doc"  
# Исходник, которые мы будем раскидывать по всем нужным нам под декториям.
TITLE='Копирование завершенно'  
# Думаю понятно.
DATE=`date +"%Y-%m-%d"` 
# Дата сегоднешней даты ( год.месяц.день )
FINDS="`find /home/bagas/Видео -type f -name '*.doc'`"
# А вот тут пришлось по потеть, ни как в цикле не хотелось. Нужно обратить внимание на выставленные  вокруг *.doc символ  Апостроф '   
#, потому что #если в момент запуска find в текущей папке будут файлы с именами оканчивающимися на .doc тo они подставятся вместо *.doc
NUM_MV=0 # Счетчики
NUM_CP=0 # Счетчики
### END INIT INFO

Сам функционал.
Цикл перемещение-переименования.

# Поехали !
IFS=$'\n'  
# Перед циклом нужно переопределить переменную IFS, которая определяет разделители в переменных. то озночает символ '\n
    for f in $FINDS; 
# Цикл поиска с переменной FINDS, вывод будет передаваться переменной f.
do
unset IFS # 
На всякий случай сбрасываем переменную на стандартные настройки.
             n=`echo "$f" | cut -f1 -d .` 
# обработка списка пакет cut удаляет полный путь и часть имени файла...до разширения.
             n1=`dirname "$f"` 
# Забираем путь до нужных нам директорий, что в дальнейшем обработанный фаел по класть обратно в них.
             mv -n "$f" "$n1/$DATE.doc" 
# Лепим, я указал параметр запуска mv -n ( означает не переписывать файл, если он есть, можно флаг -u то есть обновляться если изменился).
             let "NUM_MV += 1" 
# Добавляем в наш счетчик , переименованные файлы.
done 
# Цикл заканчивает свою работу.

Еще один цикл (Копирование).

for i in $( ls $DIR | grep [0-9] );  
# Выборка директорий которые содержат цифры. вывод директорий будет передаваться переменной i .
do
             src=$i 
# Передача данных
             mkdir -p "$DIR$src/S" 
# Создания директории, пакет mkdir запущен с ключем -p не выдавать ошибки если существует, создаем директорию S если она не создана.
             cp "$SOR" "$DIR$src/S" 
# Копирование
             let "NUM_CP += 1" 
# счетчик скопированные файлы.
done

И на конец скрипт подошел к концу. :D Финальная часть.

sh /root/sm "$TITLE".Общее количество файлов переименовано >>"$NUM_MV"<<, общее количество файлов с копировано >>"$NUM_CP"<<.
exit 1

Тут мы отправляем на mail, сообщение. и указывает какое количество действий совершил.
Как отправить на mail сообщение о ходе скрипта, смотреть тут .

Вот и все!

 Leave a Reply

(required)

(required)

37 Запросов к базе. 0,373 Генерации страницы, 36MB Использование памяти.
Вы зашли с IP: 54.225.16.10