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

求Linux下指定层级目录的.txt文件名查找Bash命令

正确的Bash命令实现指定层级文件提取

要精准匹配你描述的目录层级并提取.txt文件名,推荐使用find命令结合正则匹配来确保层级和目录命名规则严格符合要求:

命令1(正则精准匹配)

find rawdata -type f -regextype posix-extended -regex '.*/rawdata/AB[^/]+/demo/[0-9]+/[^/]+\.txt' -printf '%f\n' > test.txt

参数说明:

  • -type f:仅匹配文件,避免把目录名混入结果
  • -regextype posix-extended:启用扩展正则语法,支持+表示「一个或多个」字符
  • -regex '.*/rawdata/AB[^/]+/demo/[0-9]+/[^/]+\.txt':
    • AB[^/]+:确保二级目录以AB开头,且后续是任意非斜杠字符(严格限定为二级目录)
    • [0-9]+:确保四级目录是纯数字且至少有一位,排除空目录或含非数字字符的目录
    • [^/]+\.txt:匹配目标目录下的所有.txt文件
  • -printf '%f\n':仅输出文件名(不含完整路径)
  • > test.txt:将结果写入test.txt文件

命令2(Bash glob方式,需开启globstar)

如果你的Bash版本支持(通常4.0+),可以用glob简化写法:

shopt -s globstar
printf '%s\n' rawdata/AB*/demo/[0-9]*/.txt | xargs -n1 basename > test.txt

说明:

  • shopt -s globstar:开启递归glob匹配,让*可以精准对应固定层级的目录
  • basename:提取每个文件的纯文件名,去掉路径前缀

原命令出错原因推测:

  1. 层级匹配不严格:比如使用了rawdata/*/demo/*这类模糊匹配,导致非AB开头的二级目录、非纯数字的四级目录也被纳入
  2. 纯数字目录匹配错误:用了*而非[0-9]+,无法过滤含非数字字符的目录
  3. 未限定只匹配文件:可能把目录名也混入了结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:22:40