每当我想将数千个文件移动到一个新文件夹时,我总是遇到同样的问题。
> mkdir my_folder
> mv * my_folder
mv: cannot move 'my_folder to a subdirectory of itself 'my_folder'
Run Code Online (Sandbox Code Playgroud)
虽然我认为上面的错误是无害的(是吗?)我想知道是否有办法避免它。
如果重要,我对 zsh 中的解决方案或在各种 shell 中运行良好的解决方案感兴趣。
Kev*_*vin 14
在 zsh 中,extended_glob
启用该选项后,您可以使用~
从 glob 中排除模式,因此您可以使用:
setopt extended_glob
mv -- *~my_folder my_folder
Run Code Online (Sandbox Code Playgroud)
或者使用否定运算符(仍然带有extended_glob
):
mv -- ^my_folder my_folder
Run Code Online (Sandbox Code Playgroud)
使用大括号避免两次输入目录名称:
mv -- {^,}my_folder
Run Code Online (Sandbox Code Playgroud)
在 bash 中(对于使用它的其他答案寻求者),您可以使用 Ksh 样式的扩展 glob:
# If it's not already enabled
shopt -s extglob
mv -- !(my_folder) my_folder
Run Code Online (Sandbox Code Playgroud)
zsh
如果启用该ksh_glob
选项,您也可以使用该语法。
如果除了新子目录之外只有常规文件,您可以使用 find:
find . -type f -maxdepth 1 -exec mv {} my_folder \;
Run Code Online (Sandbox Code Playgroud)
该-type f
选项只会查找文件(而不是目录)。-maxdepth 1
将继续 find 只查找.
(不会递归到其他目录中)。在-exec …
做你的举动。
在 zsh 中,您可以将其缩写为
mv *(.) my_folder
Run Code Online (Sandbox Code Playgroud)
是的,错误是无害的。