这个问题基本上是这个问题的重复:https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder
但我问的是如何在 Mac OS X 终端中使用 oh-my-zsh 来完成此操作。
我对给出的解决方案的问题是它们似乎在我的终端中不起作用(将问题中的文件夹“new”替换为“oldCodeBase”)
[~/Sid/Moonshine_Machine, 127, master+3]: mv !(oldCodeBase) oldCodeBase
zsh: number expected
这里等待的号码是多少?
转向另一个建议的解决方案是使用 shopt 命令。
但我似乎没有可用的 shopt 命令:
~/Sid/Moonshine_Machine, 1, master+3]: shopt -s extglob dotglob
zsh: command not found: shopt
所以目前这两种解决方案似乎都不起作用。
编辑:
我发现 zsh 中的“setopt”似乎是与“shopt”类似的命令,但会导致以下问题
[~/Sid/Moonshine_Machine, 127, master+3]: setopt -s extglob dotglob
setopt: no such option: extglob
答案1
!(pattern)
是一个 ksh glob 运算符。shopt
是 bash shell 的内置命令,用于启用其选项之一(未使用 启用的选项set -o
)。bash
的extglob
选项启用 ksh 扩展 glob 运算符的子集。
在 中zsh
,否定运算符^
extendedglob
为@mdmay74 已经显示zsh 只有一组选项,全部用set -o
/切换set +o
(历史上为setopt
/ unsetopt
)。所以你会使用:
set -o extendedglob
mv -- ^oldCodeBase(D) oldCodeBase
笔记:
--
如果文件名以以下开头,则需要-
(D)
还需要移动隐藏文件(在 中bash
,您可以使用shopt -s dotglob
)。
zsh 还可以kshglob
选择启用 ksh 的扩展 glob。但由于这些使用起来比 zsh 自己的扩展 glob 运算符更麻烦,因此您通常只将其用作 ksh 模拟 ( ) 的一部分,emulate ksh
用于帮助解释为 ksh 编写的脚本。
set -o kshglob
mv -- !(oldCodeBase)(D) oldCodeBase
(请注意,!(oldCodeBase)
除非您还禁用该选项,否则单独使用是行不通的bareglobqual
,否则(oldCodeBase)
将被视为全局限定符)。
更一般地说,您不能假设在一种语言中有效的东西在另一种语言中也同样有效,除非事物来自他们共同的标准或共同遗产。两者bash
都zsh
继承了 Bourne、Korn 和 Csh 的传统,各自都有一种尝试兼容 POSIX 的模式,并且还互相复制了一些功能,但它们的语法通常不同。
答案2
在里面关联您引用的内容,阅读那里已接受的答案:在其后面的评论中,一个人询问 zsh 的等效项是什么,@MrT 回应:
setopt extendedglob
在 zsh 中设置扩展 glob 模式。^
是排除符号,所以mv ^new new
就可以了。然后查看您可以使用的 zsh 中设置的所有选项setopt
并禁用扩展 glob 模式unsetopt extendedglob
我本来可以将其放在评论中,但我还无法做到这一点......:-)