在 lftp 镜像命令中排除所有以点开头的内容

Exclude everything staring with dot in lftp mirror command

我正在使用 LFTP 通过 CI/CD 管道供应商将一些 Git 文件从 Docker 镜像镜像到我的服务器。这按预期工作但是当使用来自 LFTP 的 mirror 命令时,我需要排除任何类型的以点开头的文件,如下所示:

lftp -u $USERNAME, -e "[...] mirror [...] --ignore-time -x '/(\.\w*.*)/$' --exclude README.md [...]; exit" sftp://$HOST

但是其中 none 正在工作,它只是 跳出 那个 -x 命令并进入下一个命令(例如 --exclude README.md ).

我想这与使用 -x--exclude 无关,因为来自 the docs:

mirror [OPTS] [source [target]]

[...]

-x RX, --exclude=RX exclude matching files

这个也没用:

-x '/(\.\w*.*)/$'
-x /(\.\w*.*)/$
-x /(\.\w*.*)/
-x (\.\w*.*)
-x \.\w*.*

那怎么了?这不是 Bash 的有效正则表达式吗?

出于某种原因,对我有用的唯一方法是在 --exclude 正则表达式的末尾使用 $,如下所示:

lftp -u $USERNAME, -e "[...] mirror [...] --exclude '^\..*$'[...]

如果没有 end-of-line 分隔符,它似乎根本不起作用,只是忽略 --exclude-x 选项并选择下一个 。此外,正则表达式必须用引号引起来(单引号或双引号)。

希望这对某人有所帮助:)

像这样使用 -X 选项可能更容易: -X .* -X .*/