Я использую lftp для отправки содержимого на веб-сервер только для ftp. Сначала он работал, чтобы загружать файлы рекурсивно и даже постепенно.
Любая идея, почему при этом будут пропущены файлы, измененные в подпапке, но не пропустить файлы, измененные в домашнем каталоге?
Подробности: Я использую режим обратного зеркала, который отправляет локальные данные на сервер, а не загружает их с сервера. Во всем Интернете это рекомендуемый вариант для рекурсивного обновления.
Вот полный сценарий (от этот ответ)
#!/bin/bash
HOST="..."
USER="..."
PASS="..."
FTPURL="ftp://$USER:$PASS@$HOST"
LCD="/local/directory"
#RCD=""
#RCDCMD=cd $RCD;
#DELETE="--delete"
lftp -c "set ftp:ssl-allow no;
set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
$RCDCMD \
mirror --reverse \
$DELETE \
--verbose \
--exclude-glob .*swp \
--exclude-glob .*swn \
--exclude-glob .*swo"
В связанный вопрос, был решен из-за проблем с разрешениями, что в данном случае не является проблемой. На сервере все "rwxr-xr-x".
Дальнейшее тестирование: Lftp работает с перебоями. Например, я запускаю команду дважды, и она пропускает изменения, затем в третий раз она работает, правильно копируя измененные файлы на сервер.
В команде lftp запустите ls -R
перед mirror
.
# Set variables as in the question
lftp -c "set ftp:ssl-allow no;
set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
ls -R; # This is the key line!
$RCDCMD \
mirror --reverse \
$DELETE \
--verbose \
--exclude-glob .*swp \
--exclude-glob .*swn \
--exclude-glob .*swo"
Я собираюсь продолжить тестирование, но до сих пор это работало каждый раз, когда я его тестировал ...