如何在MacOS的zsh中移动当前目录下非PDF且含空格的文件?
在macOS zsh中正确移动含空格的非PDF文件
你的原命令失效的核心原因是:"$(find ...)"会把find输出的所有文件名拼接成单个字符串传给mv,文件名里的空格会被忽略,导致mv把整个字符串当成一个文件处理,自然找不到对应文件。
下面是三种可靠的解决方法:
方法1:用find自带的-exec(最通用可靠)
直接让find对每个匹配的文件执行mv,完全规避空格问题:
find . -type f -maxdepth 1 ! -name '*.pdf' -exec mv {} SomeFolder/ \;
! -name '*.pdf':直接排除所有PDF文件,替代原来的grep-exec mv {} SomeFolder/ \;:对每个找到的文件({}代表当前匹配的文件)执行移动操作,\;是-exec的结束标记
方法2:用zsh原生glob匹配(最简单)
zsh支持强大的文件名匹配,无需调用find,一行就能完成:
mv -- *(.^*.pdf) SomeFolder/
*:匹配当前目录下所有条目(.):限定只匹配普通文件(对应find的-type f)^*.pdf:排除所有以.pdf结尾的文件(^在zsh glob中表示取反)--:处理以-开头的文件名,避免被当成mv的命令选项
方法3:用xargs配合null分隔(管道场景适用)
如果一定要用管道,通过null字符分隔文件名来避免空格干扰:
find . -type f -maxdepth 1 ! -name '*.pdf' -print0 | xargs -0 mv -t SomeFolder/
-print0:让find用null字符分隔每个文件名,而非换行xargs -0:读取null分隔的输入,确保每个文件名被正确识别-t SomeFolder/:指定mv的目标目录,这样xargs会把所有文件作为参数传给mv
内容的提问来源于stack exchange,提问作者user129393192
相关产品推荐
相关产品推荐

