每当我想将数千个文件移动到新文件夹时,我总是遇到同样的问题。
> 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