Резюме:
У меня есть каталог, где файлы отбрасываются произвольно в сервере A. Я хочу вывести эти файлы в сервер B и удалить их из сервера A.
Фон:
Я хотел бы, пишут сценарий Bash, где код выполняет итерации через каждый файл, put
s файл через к серверу B, и удаляет его прямо после. Это будет исправлено к cron
и называемый каждый час для очистки файлов через к серверу B
Код:
Код, которого я делал попытку:
#!/bin/bash
MY_SCRIPT_NAME=`basename "$0"`
PATH_TO_METRICS='/home/some/directory'
if pidof -o %PPID -x $MY_SCRIPT_NAME > /dev/null; then
echo "$MY_SCRIPT_NAME already running; exiting"
exit 1
fi
sftp -i my_priv_key -oPort=12345 user@12.123.123.123 <<EndOfTransfer
cd $PATH_TO_METRICS
for filename in $PATH_TO_METRICS; do
PUT "$filename"
rm "$filename"
done
EndOfTransfer
Соответствующее исследование:
Вопрос:
Как каждый выполняет итерации через файлы в, учитывая каталог и использует sftp, чтобы перевезти каждый из файлов к другому серверу и удалить файл, если успешная передача произошла?
Существует два способа сделать это, которые намного легче, чем использование sftp
самостоятельно, так как Вы используете SSH в любом случае. Только необходимо использовать SFTP при фактическом выполнении "старого школьного" сервера SFTP. Если Сервер A/B является на самом деле машинами Linux, просто использование rsync
или scp
rsync --remove-source-files -r /home/some/directory user@ServerB:/somewhere/else
Это скопирует все файлы и имеет намного лучшую производительность, чем sftp
команды или scp
так как они обычно открытый/близкий много соединений. rsync
откроет единственное соединение, проверить для наблюдения что потребности быть переданным, затем передать все это без фрагментированных соединений.
Если по любой причине необходимо передать закрытый ключ или использовать пользовательские порты для SSH, можно передать -e "ssh -i foo.key -p 1234"
кому: rsync
и это будет использовать те ключи.
Необходимо понять <<EOF
и EOF
В ниже примера <<EOF
после того, как команда sftp имеет значение, передайте все sftp программе как стандартный вход, непока Вы не добираетесь до EOF (Конец Файла).
Таким образом, Вы могли легко изменить свой сценарий с этим и получить его работа.
sftp YourSftpServer <<EOF
put YourFile
exit
EOF