Приветствую, я использую ncftpput для передачи большого количества файлов с одного сервера на другой.
ncftpput -f server.txt -vRdb /public_html /var/www/site.com
Происходит то, что соединение прерывается примерно после 100 переводов. Нужно передать тысячи файлов. Проблема в том, что после того, как соединение разорвано и я повторно ввожу команду, она запускается с самого начала. Замена всех существующих файлов, делая предыдущий перенос избыточным. Есть ли способ пропустить существующие файлы? Этого нет на странице руководства, поэтому я предполагаю, что нет. Так кто-нибудь предлагает альтернативное решение для командной строки?
lftp - отличный инструмент для этого, его можно использовать в сценариях с помощью команды mirror:
lftp has builtin mirror which can download or update a whole
directory tree. There is also reverse mirror (mirror -R)
which uploads or updates a directory tree on server. Mirror
can also synchronize directories between two remote servers,
using FXP if available.
$ lftp -f
файл_сценария:
open ftp://<user>:<pass>@ftp.blah.org/~
set net:timeout 10
set net:max-retries 2
set net:reconnect-interval-base 5
set net:reconnect-interval-multiplier 1
mirror dir1 dir1
exit
#!/bin/bash
FILES=`cat server.txt`
for FILE in $FILES
do
if [ ! -d "$FILE" ]; then
echo "Uploading $FILE..."
ncftpput -DD -u $FTPUSER -p $FTPPASS $FTPHOST /destination/ftp/dir/$FILE
fi
done
Не забудьте установить FTPUSER, $ FTPPASS, $ FTPHOST. Параметр -DD удалит файл после успешный загрузить. "! -D" $ FILE "" в строке 4 пропускает каталоги в server.txt. Не забудьте сделать скрипт исполняемым с помощью "chmod 755 yourscriptfile".
Вы можете попробовать работать с ncftpput -DD
вариант. Это приведет к удалению локального файла после его успешной передачи. Если вы не хотите удалять файлы в каталоге / public_html, вы можете сначала скопировать их во временный каталог.
Пытаться wput
Есть ли причина, по которой вы не можете использовать rsync вместо ftp?
IMO rsync - подходящий инструмент для этой работы. Он будет передавать только новые и измененные файлы, а это означает, что если передача завершается и ее необходимо перезапустить, она будет продолжена с того места, где была остановлена, а не начнется снова с начала.