在 MacOS 上使用 Zsh 根据某种模式移动文件

Moving files according to some pattern with Zsh on MacOS

我正在尝试根据某种模式移动文件,在下面的例子中,将所有包含 2018 的文件移动到 2018/ 文件夹:

mv *2018* 2018/

此命令曾与 2017 一起工作,现在我得到

mv: rename 2018 to 2018/2018: Invalid argument

所以我尝试了 zmv:

autoload -Uz zmv
mv *2018* 2018/

它有效,但对 2019 或具有相同错误消息的任何其他值不再有效。

我该如何解决?或者根据某些正则表达式模式移动文件的更好但更简单的方法是什么?

我也安装了oh-my-zsh

试试这个:

mv *2018*(.) 2018/

使用 . glob 限定符(在括号中),通配符模式将只匹配常规文件。如果没有限定符,源模式将在要移动的项目列表中包含目标目录 2018,并且 mv 无法将目录移动到自身中。

当我在我的系统上尝试原始模式*2018*时,mv仍然按要求移动了匹配的文件,然后报告了关于目录的错误信息。我怀疑当这似乎起作用时,错误消息只是在其他一些文本中丢失了。

演示 . glob 限定符:

>>>> ls -p1
2017/
2017a.txt
2017b.txt
2018/
2018a.txt
2018b.txt
2019/
2019a.txt
2019b.txt
>>>> print -l *2018*   
2018
2018a.txt
2018b.txt
>>>> print -l *2018*(.)
2018a.txt
2018b.txt
>>>> mv *2018*(.) 2018/
>>>> ls -pR1           
2017/
2017a.txt
2017b.txt
2018/
2019/
2019a.txt
2019b.txt

./2017:

./2018:
2018a.txt
2018b.txt

./2019:

顺便说一句,您问题中的 zmv 示例调用的是 mv,而不是 zmv。此外,通常需要引用 zmv 的参数。你不想在这里 zmvmv 会做所有需要的事情。