среда, 2 сентября 2009 г.

Рекурсивная отправка файлов на FTP

День добрый!
Недавно возникла проблема с переброской по фтп каталога, со всем его содержимым,  подпапок, файлов и т.д.
Существуют FTP клиенты/сервера с поддержкой mput и mget, но к сожалению не всегда есть возможность ими воспользоваться.
Для решения проблемы, я написал небольшой bash скприпт, который генерирует небольшой файл с командами для ftp.
Долго не буду описывать проблему и её решение, перейду к делу:



#!/bin/bash
#Задаем папку из которой всё будет пересылаться по фтп
FOLDER="/home/nol1ght"
#Запоминаем путь до папки в которой находится этот скрипт
FTPFILEFOLDER=$PWD
#Задаём имя файла, куда мы будем записывать наши скрипты
FTPFILE=$FTPFILEFOLDER/ftpscript.tmp
#Задаём имя папки которая будет корневой на удалённом фтп
REMOTEFOLDER=/`eval date +%d.%m.%y`
#Заходим в папку которую собираемся отправить на сервер
cd $FOLDER
#Смотрим на наличие файла, который содержит наши скрипты
#Он мог остаться от предыдущего запуска программы
if [ -f $FTPFILE ]; then
 #Если он найден - удаляем
 rm $FTPFILE
else
 #Если не найден - создаём
 echo "" >> $FTPFILE
fi
#Создаём на сервере основную папку, куда будем всё переписывать
echo "mkdir $REMOTEFOLDER" >> $FTPFILE
#Заходим в неё
echo  "cd $REMOTEFOLDER" >> $FTPFILE
#Создаём на удалённом сервере под папки (чтобы соблюсти строение)
echo "mkdir $REMOTEFOLDER/home" >> $FTPFILE
#Заходим в неё
echo  "cd $REMOTEFOLDER/home" >> $FTPFILE
#В цикле пробегаем по всем папкам и ищем файлы с расширением 'tar'
for file in `ls -1R $FOLDER *.tar`; do
 #Если видим на конце двоеточие - значит это папка.
 if [[ "$file" == *: ]]
 then 
  #Убираем с конца ':'
  DIR=${file//[:]/}
  #Убираем с конца '/'
  DIR=${DIR//[/]/}
  #Создаём папку
  echo "mkdir $REMOTEFOLDER$DIR" >> $FTPFILE
  #Заходим в неё
  echo "cd $REMOTEFOLDER$DIR" >> $FTPFILE
 else
  #Если это файл и расширение у него не tar, то идём к следующей итерации
  if [[ "$file" != *.tar ]]; then 
  continue 
  fi
  #Кладём файл в директорию на сервере
  echo "put $DIR/$file" >> $FTPFILE
 fi
done
#Прощаемся с сервером.
echo "bye" >> $FTPFILE

На выходе мы получили файл с названием ftpscript.tmp,
в котором записаны все действия которые нужно произвести FTP,
для того чтобы залить нашу папку.

Как им теперь воспользоваться?
В моём недавнем посте я писал про автоматизацию sFTP,
если посмотреть на его код, то можно легко понять куда поместить наш свежий скприт.

Удачной Вам работы с FTP!

source

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

Отправить комментарий