从本地同步到远程
remote_path="/htdocs/mynote"
local_path="/Users/wish/_data/webpage"
ftp_host="ftp.epizy.com"
ftp_port="21"
ftp_user=""
ftp_pass=""
lftp -u "$ftp_user,$ftp_pass" -e "set ssl:verify-certificate no; set mirror:use-pget-n 10; mirror -R --verbose --delete --only-newer --exclude-glob='.DS_Store*' $local_path $remote_path; quit" ftp://$ftp_host:$ftp_port
这个命令的作用是:
-u "xxxx,xxxx":使用给定的用户名和密码登录 FTP 服务器。
-e:后面跟着的字符串是要执行的命令序列。
set ssl:verify-certificate no;:关闭 SSL 证书验证。
set mirror:use-pget-n 10;:设置 mirror 命令使用最大 10 个并行连接进行文件传输。
mirror -R --verbose --delete --only-newer /Users/wish/_data/webpage /htdocs/mynote;:执行 mirror 命令,以递归方式(-R 或 --reverse)从本地目录 /Users/wish/_data/webpage 同步到远程目录 /htdocs/mynote,并且是详细模式(--verbose),删除远程上不存在于本地的文件(--delete),以及仅上传本地较新的文件(--only-newer)。
quit:退出 lftp。
#从远程到本地
#lftp -u "username,password" -e "set ssl:verify-certificate no; set mirror:use-pget-n 10; mirror --verbose --delete --only-newer -R /htdocs/mynote /Users/wish/_data/webpage; quit" ftp://ftp.epizy.com
这里的变化点:
-R 或 --reverse 参数仍然保留,因为它指示 mirror 命令进行反向同步,即从远程同步到本地。
将远程目录 /htdocs/mynote 放在 mirror 命令的第一个位置,本地目录 /Users/wish/_data/webpage 放在第二个位置。
其余选项含义不变:
set ssl:verify-certificate no; 依然关闭 SSL 证书验证(请注意,生产环境中不建议这么做)。
set mirror:use-pget-n 10; 仍设置最多 10 个并行连接进行传输。
--verbose 输出详细同步过程信息。
--delete 删除本地不存在于远程服务器上的文件。
--only-newer 只下载远程文件中比本地文件新(基于文件修改时间)的文件。
# 忽略文件
# lftp -u "username,password" -e "
# open ftp://ftp.example.com:port;
# set mirror:use-pget-n 10;
# set exclude-list '/path/to/exclude1 /path/to/exclude2';
# mirror --verbose --delete --only-newer --exclude-glob='*.tmp' --exclude-from=$HOME/.lftp/excludes.txt -R /remote/path /local/path;
# quit
# " ftp://ftp.example.com:port
在这个示例中:
set exclude-list 命令可以接受一个或多个路径,用来排除不需要同步的远程目录。
mirror 命令中的 --exclude-glob='*.tmp' 参数可以排除所有扩展名为.tmp 的文件。
--exclude-from=
请注意,--exclude-glob 参数使用 glob 模式匹配,而从文件中读取的排除规则使用的是正则表达式。这两种排除方式可以结合使用,以满足你的不同需求。