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

如何删除foo、bar目录下文件名数字为奇数的txt文件?

原代码错误原因
  • expr match "$file" '[0-9]' 只会匹配文件路径开头的数字,如果你拿到的路径是./foo/1.txt这类带前缀的格式,根本提取不到文件名里的数字,返回值为空直接导致判断逻辑失效
  • 取余运算没有做算术展开,%会被识别为普通字符串,数值判断逻辑完全不生效
可行解决方案

方案1:直接匹配奇数文件名删除(最高效,无额外逻辑)

直接通过文件名通配匹配你要删除的奇数命名文件,一步完成操作:

find ./foo ./bar -type f -name "[13579].txt" -delete -print

参数说明:

  • 直接指定扫描./foo和./bar两个目标目录,避免误扫其他路径
  • -name "[13579].txt" 精准匹配文件名是1、3、5、7、9的txt文件,完全覆盖你要删除的奇数文件范围
  • -delete 执行删除操作,-print 会输出已删除的文件路径,替代原代码中rm -v的效果

方案2:保留循环判断逻辑(适合后续需要扩展其他判断规则的场景)

如果一定要用提取数字判断奇偶的逻辑,修正后的代码如下:

find ./foo ./bar -type f -regextype egrep -regex '.*/[0-9]\.txt' | while read -r file; do
    # 提取文件名中的纯数字部分,自动忽略路径前缀和.txt后缀
    num=$(basename "$file" .txt)
    # 判断为奇数就删除
    [ $(( num % 2 )) -eq 1 ] && rm -v "$file"
done

操作提示

删除前可以先去掉删除参数,先打印待删除的文件列表确认无误再执行操作,避免误删:

# 测试方案1的匹配结果
find ./foo ./bar -type f -name "[13579].txt" -print

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:15:03