我刚刚发现范围通配符大括号展开{..}从shell ({05..18}将匹配05,06…,18).
我使用zsh自动完成(tab)来导航服务器层次结构并正确转义特殊字符。
我的例子是在服务器上使用一个简单的文件层次结构:folder1
➡️folder2 [x]
➡️➡️file1
➡️➡️file2
路径/folder1/folder2[x]/file
将被转义为正确数量的。
noglob rsync server:/folder1/folder2\[x\]/file1 .
获取file1和file2:
noglob rsync server:/folder1/folder2\[x\]/file[12] .
但这不是:
noglob rsync server:/folder1/folder2\[x\]/file{1..2} .
源端和目的端不能同时为远端
问题是..
(我认为),所以我使用双引号"
来逃避服务器部分。
noglob rsync "server:/folder1/folder2\[x\]/file{1..2}" .
(注意在[
和]
之前只有2个)
但是,当构造带有自动完成的命令时,自动完成对文件夹名而不是文件名起作用。
noglob rsync "server:/
选项卡
noglob rsync "server:/folder1/
选项卡
noglob rsync "server:/folder1/folder2\[x\]/
选项卡
(无添加)
最后一个之后的预期结果是
noglob rsync "server:/folder1/folder2\[x\]/file
编辑:我刚刚注意到完成不工作只有当最后一个文件夹需要转义它的名称(其中的空格或[…])。
编辑2:补全使用单引号(转义只需要一个)。
noglob rsync 'server:/folder1/folder2[x]/
选项卡
noglob rsync 'server:/folder1/folder2[x]/file
补全使用单引号(转义只需要一个)。
noglob rsync 'server:/folder1/folder2[x]/
选项卡
noglob rsync 'server:/folder1/folder2[x]/file