Скрипт для удаленного копирования файлов через FTP
Уважаемые пользователи! Нужно перенести бэкапи из одного сервера на другой сервак
Вот протестировал данный скрипт, работает, вот только нужно чтобы он не все перенес а только новые бэкапи, а те которые уже есть на другом не переносил. Прошу помочь с данной задачой
#!/bin/bash HOST=IP USER=user PASSWORD=password
д смотрел этот rsync, просто интересно нельзя ли только скриптом обойтись
Winscp для винды умеет синхронизацию, надо искать под линукс подобное
Также есть rsync через ssh
д смотрел этот rsync, просто интересно нельзя ли только скриптом обойтись
Можно, конечно! Только скрипт надо поправить — заменить «ftp» на «rsync».
wget —no-clobber , но лучше таки rsync.
Нормальный gui синхронизации есть только в winscp
ftp очень старая и примитивная программа, и для скриптов не предназначенная. Используй луче lftp .
Файлы, которые уже есть не будут закачаны повторно.
Если сервер ругается, то set ftp:use-mdtm-overloaded on можно убрать — оно заставляет сохранять время изменения файла на получателе такое же как на источнике. Почитай man lftp там куча всего полезного, например, можно автоматически удалять файлы на источнике или наоборот удалять на получателе файлы, которых нет на источнике, обходить директории рекурсивно и многое другое.
Источник
Script для поиска и копирования файла по фтп.
Есть текстовый документ в котором хранятся данные(название файлов, размер, дата). Нужно что бы скрипт брал имена файлов(первый столбец), находил их на машине(показывая путь к ним) и копировал по фтп. Так же бывают файлы с доп припиской «_123», которую нужно убрать при создании копии.
Все выходит, но вот момент с копированием с другой директории не особо. Переменную вторую надо найденному пути через файнд, которая потом будет указывать где брать для копирования файлы с документа.
выхлоп cat передать cut то делаешь вот так: cat file.csv | cut -f 1
Зачем учить плохому? Зачем тут вообще cat?
Что касается парсенья cvs, то вот мой:
Зачем учить плохому? Зачем тут вообще cat?
Это приманка на готовый скрипт. Мухахахахаххаа.
Вот что то такое у меня получилось. Но обратно же файл который находиться в другой директории не копируеться. И последние 2 команды думаю можно переделать.
Но что плохого в cat file | while read? Чем оно хуже done ★★★★★ ( 18.10.18 12:29:35 )
Вопрос с копированием файла который был найден в другом директории остаеться. Да и имя он будет изменять?
Так ты не правильно сделать. У тебя cd и cp за скриптом. done надо в конец скрипта, cd не надо вообще cp и так скопирует. В одну строчку писать не обязательно.
Сделал по другому.
Как то так получилось. Вопрос, а как указать что бы файл читался с 2 строки но 1 столбца?
Вот что то такое у меня получилось.
К сожалению, я вам не могу помочь. Ваш заглавный пост — нечитаемый бред, ваш скрипт больше похож на схематичную картинку с попыткой отобразить, что вам собственно надо, но совсем не похож на рабочий скрипт.
И по именам, вот если такая будет ситуация что имя в документе указано как «test» а найден будет «test_123», или не сможет найти потому что имя не совпадает. Это можно как то указать в скрипте? Переименование или поправку такую.
Что Вам не понятно?
Но что плохого в cat file | while read? Чем оно хуже done ★★★★★ ( 18.10.18 13:11:08 )
Можете тогда показать целосный вид скрипта где учитывались моменты с именем что я вот выше отписал и нормально читался документ с именами и дальнейшим копированием по фтп.
Вопрос, а как указать что бы файл читался с 2 строки но 1 столбца?
Погугли про head/tail
И по именам, вот если такая будет ситуация что имя в документе указано как «test» а найден будет «test_123», или не сможет найти потому что имя не совпадает. Это можно как то указать в скрипте? Переименование или поправку такую.
cp $fname_из_find /var/www/backup/$f ? Я не знаю на самом деле, вроде так. Проверь как будет работать.
Можете тогда показать целосный вид скрипта
Мне делать больше нечего что ли?
Игнорирование первой строки делается её чтением и не запуском парсера для нее.
Надо как то обрабатывать еще дубликаты, которые будут, если похожие имена иметь будем. Тобишь если 2 файла, мы их делаем под 1 именем и далее как то надо от этой проблемы уйти. Да и передача переменных отсутствует.
Команда с переименованием не сработала, возможно другие идеи есть?
Источник
linux-notes.org
Скачивать и закачивать файлы по FTP используя консоль
FTP (File Transfer Protocol) является наиболее популярным протоколом для передачи файлов (скачиваать и загружать) из одной системы в другую систему. Это обеспечивает быстрыйспособ передачи файлов . Есть много доступных приложений на Linux и Windows такие как VSFTPD, ProFTPD для Linux, FileZilla Server для windows и macOS.
Есть различные способы для подключения к FTP-серверу использую графическую среду, но системный администратор должен знать силу командной строки. И в данной теме «Скачивать и закачивать файлы по FTP используя консоль» я расскажу как можно работать с командной строкой для передачи/получения данных.
1. Подключение к FTP-серверу с помощью командной строки
Для подключения к любому серверу с помошью командной строки служит терминал.
2. Загрузить файл на FTP-сервер
Чтобы загрузить файл на сервер используют FTP put. Во-первых нужно перейти в нужную папку на FTP сервере для загрузки файла и использовать следующую команду.
3. Скачать один файл из FTP-сервер
Чтобы скачать файл из FTP-сервера, мы используем команду get. Используя эту команду мы можем загрузить один файл. Чтобы скачать какой-либо файл с сервера FTP, сперва войдите на FTP-сервер, потом перейдите в каталог и использования следующую команду, чтобы скачать любой файл:
4. Загрузить несколько файлов на FTP-сервер
Чтобы загрузить несколько файлов на FTP-сервере мы используем MPUT команду. Мы можем указать символ шаблона для загрузки нескольких файлов на сервер одновременно. Во-первых перейдите к нужной папке на FTP сервере для загрузки файла и используйте следующую команду. Он будет загрузить все файлы с расширением .txt в каталог /home/captain для закачанных файлов на FTP-сервере.
5. Скачать несколько файлов с FTP-сервера
Чтобы скачать несколько файлов с FTP-сервера, мы используем MGET команду. Используя эту команду можно загружать файлы.
Команды.
!
Выйти с оболочки shell
?
Расспечатать помошь о локальной информации
append
Добавьте в файл
ascii
Установить тип передачи ASCII. Используйте это, чтобы передать текстовые файлы (HTM-файлы).
bell
Звуковой сигнал при завершении команды.
binary
Установите двоичный тип передачи. Используйте это для передачи двоичных файлов (XE-файлов и графики).
bye
Завершить сеанс подключения и работу.
cd
Изменить удаленный рабочий каталог (использование «..», чтобы перейти к родителю).
close
Завершить сеанс FTP.
delete
Удалить удаленный файл.
debug
Переключить режим отладки.
dir
Перечислите (показать) содержимое удаленного каталога.
disconnect
Завершить сеанс FTP.
get
Получить файл (смотрите также mget).
glob
Переключить расширение метасимвол из локального имени файлов.
hash
Переключить печать ‘#’ для каждого переданного буфера.
help
Показать список команд.
lcd
Изменить локальный рабочий каталог.
literal
Отправить произвольную команду FTP.
ls
Показать содержимое удаленного каталога.
mdelete
Удаление нескольких файлов.
mdir
Список содержимого нескольких удаленных каталогов.
mget
Получить несколько файлов (смотрите также get)
mkdir
Создайте каталог на удаленной машине.
mls
Список содержимого нескольких удаленных каталогов.
mput
Отправить несколько файлов (смотрите также put).
open
Подключение к удаленному FTP.
prompt
Грубое интерактивное приглашение на нескольких команд (это переключение)
put
Отправить один файл (смотрите также mput).
pwd
Распечатать рабочую папку (где ты находишся сейчас) на удаленной машине.
quit
Завершить сеанс подключения и работу.
quote
Отправить произвольную команду FTP. Вы можете просмотреть список raw команд FTP на www.nsftools.com/tips/RawFTP.htm
recv
Receive file
remotehelp
Get help from remote server
rename
Получить файл.
rmdir
Удалить каталог на удаленной машине.
send
Отправить один файл.
status
Показать текущее состояние.
trace
Переключить трассировку пакетов.
type
Установить тип файла передачи
user
Отправить новую информацию пользователя.
verbose
Переключить подробный режим.
Тема «Скачивать и закачивать файлы по FTP используя консоль» завершена.
Источник
Простой способ резервного копирования Linux-сервера с выгрузкой файлов по FTP
Здравствуйте.
О важности регулярного резервного копирования уже сказано очень много слов. В этой статье мы предлагаем вниманию читателей примеры простых скриптов для бэкапа файлов и баз данных MySQL с последующей выгрузкой архивов на удаленный FTP-сервер.
Несмотря на то что мы в NQhost предлагаем решения по сохранению snapshot’ов VPS-контейнеров, процесс бэкапа собственными силами — безусловно важнейшая вещь.
Хозяйство
Виртуальный или физический сервер с установленной Linux-ОС, веб-сервером и базами данных MySQL.
Файлы веб-сервера располагаются в директориях
/home/site1
/home/site2
/home/site3
Задача
Создание скрипта для резервного копирования файлов и баз данных с сохранением на удаленном FTP-сервере и запуск его каждый день.
Решение
Для простоты примера работать мы будем из-под root`а, директория для хранения бэкапов файлов — /root/backup/server, а для дампов MySQL — /root/backup/mysql
Backup файлов
Здесь приводится пример скрипта для бэкапа файлов, для наглядности пояснения даны в квадратных скобках на русском языке.
#!/bin/sh
### System Setup ###
BACKUP=/root/backup/server
### FTP ###
FTPD=»/»
FTPU=»username» [имя пользавателя (логин) удаленного ftp-cервера]
FTPP=»megapassword» [пароль доступа к удаленному ftp-серверу]
FTPS=»my_remote_backup.ru» [собственно, адрес ftp-сервера или его IP]
### Binaries ###
TAR=»$(which tar)»
GZIP=»$(which gzip)»
FTP=»$(which ftp)»
## Today + hour in 24h format ###
NOW=$(date +%Y%m%d) [задаем текущую дату и время, чтобы итоговый файл выглядел в виде server-YYYYMMDD.tar.gz]
mkdir $BACKUP/$NOW
$TAR -cf $BACKUP/$NOW/etc.tar /etc [c целью сохранения настроек для простоты копируем весь /etc ]
$TAR -cf $BACKUP/$NOW/site1.tar /home/site1/
$TAR -cf $BACKUP/$NOW/site2.tar /home/site2/
$TAR -cf $BACKUP/$NOW/site2.tar /home/site3/
$TAR -zcvf $ARCHIVE $ARCHIVED
### ftp ###
cd $BACKUP
DUMPFILE=server-$NOW.tar.gz
$FTP -n $FTPS
Результатом работы данного скрипта будет созданный файл в директории /root/backup/server вида server-ГГГГММДД.tar.gz содержащий в себе tar-архивы директорий /etc, /home/site1, /home/site2 и /home/site3
Этот же файл будет загружен на FTP-сервер, который мы указали в начале скрипта.
Backup баз MySQL
Этим скриптом мы выгружаем базы данных MySQL (делаем т.н. «дампы). Каждая база выгружается в отдельный файл.
#!/bin/sh
# System + MySQL backup script
### System Setup ###
BACKUP=/root/backup/mysql
### Mysql ### [параметры доступа к нашим базам MySQL]
MUSER=»root»
MPASS=»megapassword»
MHOST=»localhost»
### FTP ###
FTPD=»/»
FTPU=»username» [имя пользавателя (логин) удаленного ftp-cервера]
FTPP=»megapassword» [пароль доступа к удаленному ftp-серверу]
FTPS=»my_remote_backup.ru» [собственно, адрес ftp-сервера или его IP]
### Binaries ###
TAR=»$(which tar)»
GZIP=»$(which gzip)»
FTP=»$(which ftp)»
MYSQL=»$(which mysql)»
MYSQLDUMP=»$(which mysqldump)»
## Today + hour in 24h format ###
NOW=$(date +%Y%m%d)
### Create temp dir ###
### name Mysql ###
DBS=»$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ‘show databases’)»
for db in $DBS
do
Источник