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

使用find命令删除非视频文件报错:paths must precede expression求助

问题排查:find命令删除非视频文件报错"paths must precede expression"

你要删除/to/path/目录下除指定视频格式外的所有文件,使用的命令如下:

find /to/path/ -type f -not \(-name '*.mp4' -or -name '*.flv' -or -name '*.3gp' -or -name '*.mov' -or -name '*.asf' -or -name '*.mpg' -or -name '*.avi' -or -name '*.mpeg' -or -name '*.wmv' -or -name '*.rm' -or -name '*.dat' -or -name '*.mkv' -or -name '*.vob' -or -name '*.m2v' -or -name '*.f4v' -or -name '*.m4v' -or -name '*.m2t' -or -name '*.mts' -or -name '*.webm' -or -name '*.ts' \) -delete

出现错误提示:

find: paths must precede expression

问题原因

核心问题是**-or不是find的标准逻辑运算符**,POSIX标准和大多数find版本(包括GNU find)中,逻辑或的正确写法是-o。使用非标准的-or会导致find无法正确解析表达式结构,进而抛出"paths must precede expression"的错误。

另外需注意,括号前后必须保留空格(\(后、\)前),否则shell会将其解析为无效语法,同样可能引发解析错误。

修正后的命令

将所有-or替换为标准的-o,同时确保括号转义和空格格式正确:

find /to/path/ -type f -not \( -name '*.mp4' -o -name '*.flv' -o -name '*.3gp' -o -name '*.mov' -o -name '*.asf' -o -name '*.mpg' -o -name '*.avi' -o -name '*.mpeg' -o -name '*.wmv' -o -name '*.rm' -o -name '*.dat' -o -name '*.mkv' -o -name '*.vob' -o -name '*.m2v' -o -name '*.f4v' -o -name '*.m4v' -o -name '*.m2t' -o -name '*.mts' -o -name '*.webm' -o -name '*.ts' \) -delete

安全建议

执行删除操作前,建议先去掉-delete,添加-print参数预览待删除文件,确认无误后再执行删除:

find /to/path/ -type f -not \( -name '*.mp4' -o -name '*.flv' -o -name '*.3gp' -o -name '*.mov' -o -name '*.asf' -o -name '*.mpg' -o -name '*.avi' -o -name '*.mpeg' -o -name '*.wmv' -o -name '*.rm' -o -name '*.dat' -o -name '*.mkv' -o -name '*.vob' -o -name '*.m2v' -o -name '*.f4v' -o -name '*.m4v' -o -name '*.m2t' -o -name '*.mts' -o -name '*.webm' -o -name '*.ts' \) -print

内容的提问来源于stack exchange,提问作者ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:08:41