LFTP 镜像包含 - 包括除我包含的目录之外的其他目录

LFTP 镜像包含 - 包括除我包含的目录之外的其他目录

我的问题: 如何确保 LFTP 只包含文件 目录使用--include--include-glob,而不是从远程根目录下载一堆不在包含范围内的额外目录?

一些背景:

我正在使用 LFTP 和镜像来下载站点文件,但我只想下载某些文件和目录。因此,我为 LFTP 提供了一些包含和排除,以便从远程服务器的根目录运行。

根据 LFTP man 的说法,我的理解是,如果您指定包含,它将仅包含您告诉它的所有文件,然后将排除应用到包含规则。这对于根目录中的文件来说非常完美,并且不会下载任何未包含的文件...但是,它会下载根目录中的所有目录,而不仅仅是我要求它包含的目录。

我怀疑我在使用--include和时遇到问题--include-glob...无论我在两者(glob 或正则表达式)之间尝试过什么,我都无法让 LFTP 镜像不下载我在包含内容中指定的目录之外的目录。

这是我的 bash 脚本(对于 bash 脚本来说有点新)

#!/bin/bash

# Credentials
protocol="ftp" # ftp or sftp
host="host"
user="user"
pass="pass"
localcd="/path/to/localdir"
remotecd="/remotedir"

# Set up FTP URL
ftpurl="$protocol://$user:$pass@$host"

# Default includes - helps only include core files in root in case there are other random files
includes="--include-glob wp-admin/*" # other dirs are still being downloaded with these three
includes+=" --include-glob wp-content/*"
includes+=" --include-glob wp-includes/*"

includes+=" --include ^wp-.*\.php$"  # works just fine
includes+=" --include ^index.php$"   # works just fine
includes+=" --include ^xmlrpc.php$"   # works just fine

# Exclude hidden files/directories
excludes="--exclude-glob .*"
excludes+=" --exclude-glob .*/"

# LFTP sets
lftp_sets="set cmd:fail-exit yes;"
if [ "$protocol" == "ftp" ]
then
    lftp_sets+=" set ftp:ssl-allow no;"
fi

# Run the LFTP
lftp -e "$lftp_sets
open '$ftpurl';
lcd $localcd;
cd $remotecd;
mirror --continue --only-newer --delete --verbose=3 --no-perms --parallel=8 $includes $excludes"

我试过了

includes="--include ^wp-.*/.**"

includes="--include ^wp-admin/.*"
includes+="--include ^wp-content/.*"
includes+="--include ^wp-includes/.*"

还有更多的变化,我无法数清。我在 google 上搜索到的有关 LFTP 镜像 4 页深的所有内容都有一个紫色链接。 :(

答案1

操作顺序。

您首先需要排除,然后是包含。

此示例排除所有内容,然后包含某些文件夹,然后排除包含的这些文件夹中的文件。

mirror --exclude '.*' --exclude '.*/' --include 'v*-stable/' -X '*.src.rpm'

在你的情况下

mirror --continue --only-newer --delete --verbose=3 --no-perms --parallel=8 $excludes $includes"

相关内容