【问题标题】:Syntax for using lftp to synchronize local folder with an ftp folder?使用 lftp 将本地文件夹与 ftp 文件夹同步的语法?
【发布时间】:2011-07-11 21:14:05
【问题描述】:

我想同步两个文件夹。它应该有两种方式,始终保持文件夹最新(我使用常规的 cronjob)。但是,首先我没有让双向文件传输工作(它只是从 ftp 下载而不是相反)。

其次,它从 ftp 下载全部内容,即使登录信息已在 ftp 上设置,因此访问仅限于特定文件夹。为什么??

这是代码(提前致谢!):

#!/bin/bash

#get username and password
USER=username
PASS=password

HOST="myftpserver.com/users/user1/" #here I have tried with only specifying server name as well as including whole path
LCD="~/Desktop/localfolder/"
RCD="users/user1/"

lftp -c "set ftp:list-options -a;
open ftp://$USER:$PASS@$HOST; 
lcd $LCD;
mirror -c --reverse --verbose $LCD $RCD" #I have tried a few different options w/o result

【问题讨论】:

  • 似乎更像是 ServerFault 的问题,而不是 StackOverflow 的问题。
  • 只是读到 rsync 不能通过 ftp 工作。看来我需要弄清楚如何使用 lftp 来做到这一点。
  • 好的,现在我可以正常工作了。但是,“同步”并不是很有用。例如。如果我从其中一个文件夹中删除一个文件,它会在下次运行 lftp 脚本时再次下载。由于我追求的是同步,我当然希望它保留最新的更改而不是覆盖它。 lftp 可以吗?

标签: linux ftp sync synchronize


【解决方案1】:

你可能不再需要这个了(4 年后),但我会更新这个,如果有人遇到同样的问题,这里是一个帮助。

如果您想将 FTP 服务器文件夹与文件夹中的内容同步,您应该使用类似这样的方法

#!/bin/bash

#get username and password
USER=username                   #Your username
PASS=password                   #Your password
HOST="myftpserver.com"          #Keep just the address
LCD="~/Desktop/localfolder"     #Your local directory
RCD="/users/user"               #FTP server directory

lftp -f "
open $HOST
user $USER $PASS
lcd $LCD
mirror --continue --reverse --delete --verbose $LCD $RCD
bye
" 

如果您想使用它从本地文件夹同步到 FTP 服务器,只需删除 --reverse 并在镜像命令中交换文件夹。

#!/bin/bash

#get username and password
USER=username                   #Your username
PASS=password                   #Your password
HOST="myftpserver.com"          #Keep just the address
LCD="~/Desktop/localfolder"     #Your local directory
RCD="/users/user"               #FTP server directory

lftp -f "
open $HOST
user $USER $PASS
lcd $LCD
mirror --continue --delete --verbose $RCD $LCD
bye
" 

要执行您在问题中评论的操作,同步两种方式并保持每种方式的最新值,我认为单独使用 lftp 是不可能的,您需要一些东西来检测更改并决定使用哪个脚本。

【讨论】:

  • 澄清:第一个脚本在服务器端进行更改,第二个脚本在本地进行
  • 系统提示我输入密码,有没有办法避免这种情况?
  • 第二个脚本有错误:需要将“lcd $LCD”改为“cd $RCD”
  • 这个答案非常不清楚。我太害怕将文件夹替换为空文件夹,因为我“同步”了错误的方向。两个脚本的描述基本相同(“从本地到 FTP”)。
  • 如果同步远程FTP服务器文件夹到本地文件夹:mirror --continue --delete --verbose $RCD $LCD
【解决方案2】:

如果将远程FTP服务器文件夹同步到本地文件夹并使用上面的lftp-4.9,请试试这个脚本:

#!/bin/bash

LFTP_HOME=/home/lftp-4.9.2
#get username and password
REMOTE_FTP_USER="user"
REMOTE_FTP_PASS="passwd"
REMOTE_HOST="ftp-server"
REMOTE_PORT="ftp-pport"
LOCAL_FOLDER="/home/ftpRoot/backup_mirror/"
REMOTE_FOLDER="/"

cd $LOCAL_FOLDER
$LFTP_HOME/bin/lftp -f "
open -p $REMOTE_PORT $REMOTE_HOST
user $REMOTE_FTP_USER $REMOTE_FTP_PASS
mirror -c -e --verbose --target-directory=$LOCAL_FOLDer $REMOTE_FILDER
bye
"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    相关资源
    最近更新 更多