如何将文件夹中的所有文件移动到 zsh w/ Mac OS X 中的子文件夹?

如何将文件夹中的所有文件移动到 zsh w/ Mac OS X 中的子文件夹?

这个问题基本上是这个问题的重复: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)。bashextglob选项启用 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)将被视为全局限定符)。

更一般地说,您不能假设在一种语言中有效的东西在另一种语言中也同样有效,除非事物来自他们共同的标准或共同遗产。两者bashzsh继承了 Bourne、Korn 和 Csh 的传统,各自都有一种尝试兼容 POSIX 的模式,并且还互相复制了一些功能,但它们的语法通常不同。

答案2

在里面关联您引用的内容,阅读那里已接受的答案:在其后面的评论中,一个人询问 zsh 的等效项是什么,@MrT 回应:

setopt extendedglob在 zsh 中设置扩展 glob 模式。^是排除符号,所以mv ^new new就可以了。然后查看您可以使用的 zsh 中设置的所有选项setopt并禁用扩展 glob 模式unsetopt extendedglob

我本来可以将其放在评论中,但我还无法做到这一点......:-)

相关内容