mv * 文件夹(避免“无法移动”错误)

mv * 文件夹(避免“无法移动”错误)

每当我想将数千个文件移动到新文件夹时,我总是遇到同样的问题。

> mkdir my_folder
> mv * my_folder
mv: cannot move 'my_folder to a subdirectory of itself 'my_folder'

虽然我认为上面的错误是无害的(是吗?)我想知道是否有办法避免它。

如果重要的话,我对 zsh 中的解决方案或在各种 shell 中运行良好的解决方案感兴趣。

答案1

在 zsh 中,extended_glob启用该选项后,您可以使用~从 glob 中排除模式,因此您可以使用:

setopt extended_glob
mv -- *~my_folder my_folder

或者使用否定运算符(仍然使用extended_glob):

mv -- ^my_folder my_folder

使用大括号以避免输入两次目录名称:

mv -- {^,}my_folder

在 bash 中(对于其他使用它的答案寻求者),您可以使用 Ksh 风格的扩展 glob:

# If it's not already enabled
shopt -s extglob
mv -- !(my_folder) my_folder

zsh如果启用该ksh_glob选项,您还可以使用该语法。

答案2

如果除了新子目录之外只有常规文件,您可以使用 find:

find . -type f -maxdepth 1 -exec mv {} my_folder \;

-type f选项只会查找文件(而不是目录)。-maxdepth 1将继续查找仅在.(不会重复到其他目录中)。你-exec …的举动。

在 zsh 中,您可以将其缩写为

mv *(.) my_folder

是的,这个错误是无害的。

答案3

您可以使用 :

mv * my_folder 2>/dev/null

相关内容