You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:39:58