Как поместить файлы и удалить их прямо после посредством SFTP в сценарии Bash?

Резюме:

У меня есть каталог, где файлы отбрасываются произвольно в сервере A. Я хочу вывести эти файлы в сервер B и удалить их из сервера A.

Фон:

Я хотел бы, пишут сценарий Bash, где код выполняет итерации через каждый файл, puts файл через к серверу 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, чтобы перевезти каждый из файлов к другому серверу и удалить файл, если успешная передача произошла?

2
задан 26 September 2018 в 03:50

2 ответа

Существует два способа сделать это, которые намного легче, чем использование 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 и это будет использовать те ключи.

0
ответ дан 2 December 2019 в 07:01

Необходимо понять <<EOF и EOF

В ниже примера <<EOF после того, как команда sftp имеет значение, передайте все sftp программе как стандартный вход, непока Вы не добираетесь до EOF (Конец Файла).

Таким образом, Вы могли легко изменить свой сценарий с этим и получить его работа.

sftp YourSftpServer <<EOF
put YourFile
exit
EOF
0
ответ дан 2 December 2019 в 07:01

Другие вопросы по тегам:

Похожие вопросы: