如何在 zsh 中通过 rsync 按星号或类似表达式过滤

如何在 zsh 中通过 rsync 按星号或类似表达式过滤

我有很多文件,名称如下:

/var/log/foo/2014-07-06-01.log
...
/var/log/foo/2014-07-20-04.log

每天我都有几个日志文件,我想下载指定一天的日志文件:

$ rsync server:/var/log/foo/2014-07-06-*.log .

但是我zsh: no matches found出错了。

我在手册中发现我可以按扩展名进行过滤,但我找不到如何在这种情况下过滤文件名。

有没有简单的方法来使用过滤rsync

答案1

您需要转义特殊字符,例如

$ rsync server:/var/log/foo/2014-07-06-\*.log .

或者

$ rsync 'server:/var/log/foo/2014-07-06-*.log' .

或者更好,安装url-quote-magic,例如

autoload -Uz url-quote-magic
zle -N self-insert url-quote-magic
zstyle ':urlglobber' url-other-schema http https ftp mailto

这样 zsh 就会自动为你做这件事。您可能想要添加其他 URL 方案...

编辑:或者,您可以unsetopt NOMATCH,以便错误回退到 POSIX shell 行为,但我不鼓励您这样做,因为在某些情况下可能会导致意外结果。

答案2

其他方式:

$ noglob rsync server:/var/log/foo/2014-07-06-*.log .

zsh手册页:

noglob   Filename  generation  (globbing)  is not performed on any of the
         words.

相关内容