使用find命令搭配sed正则筛选不含IMDB ID的文件未达预期
原命令错误分析
- 正则失效原因:
find的-regex参数是完全匹配完整文件路径,而非仅匹配文件名片段,原正则"tt\d{7}"未加前后通配符,无法匹配./xxx tt1234567.mp4这类带前后缀的路径,导致-not排除条件完全不生效。- 原命令用
-regextype sed(POSIX基础正则),不支持\d数字简写,且{7}数量限定符需要转义为\{7\},正则无法命中IMDB ID格式。
- 带
./前缀原因:find默认输出相对当前目录的完整路径,当前目录以.标识,因此输出自动附带该前缀。
可直接运行的命令
推荐写法(用扩展正则语法更简洁)
find . -type f -regextype posix-extended -not -regex ".*tt[0-9]{7}.*" -printf "%f\n"
兼容原sed正则类型的写法
如果不想修改正则类型,可将数量限定符转义后使用:
find . -type f -regextype sed -not -regex ".*tt[0-9]\{7\}.*" -printf "%f\n"
参数说明
-type f:仅筛选普通文件,排除目录等非文件类型-regextype posix-extended:启用POSIX扩展正则,无需转义数量限定符-not -regex ".*tt[0-9]{7}.*":匹配路径任意位置含tt+7位数字格式的文件,取反后即为不含IMDB ID的文件-printf "%f\n":自定义输出格式,仅提取文件名部分,剔除./前缀,每条结果换行输出
备注:如果需要按文件名排序输出,可在命令末尾追加
| sort即可。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

