在 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 .*/
我正在使用 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 .*/