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

如何用Bash的ls命令筛选仅含lsst中间段的文件?

解决Bash文件名匹配问题:仅列出指定模式的文件

嘿,刚接触Bash是吧?这个文件名筛选的问题其实挺典型的,咱们来一步步搞定它~

方法1:使用Bash扩展通配符(extglob)

这是Bash自带的高级匹配功能,能精准排除不需要的模式,步骤如下:

  1. 先开启extglob扩展(如果没开启的话):
shopt -s extglob
  1. 执行匹配命令:
ls a_lsst!(@(90|_mono*)).txt

解释:!(@(pattern)) 是extglob的语法,表示不匹配括号内任意一个模式。这里@(90|_mono*)代表要么是90,要么是_mono开头的字符串,所以这个命令会筛选出a_lsst后面既不是90也不是_mono开头的文件,正好就是你要的那两个目标文件。

如果经常需要用extglob,可以把shopt -s extglob添加到你的~/.bashrc文件里,这样每次打开终端都会自动开启这个功能。

方法2:用ls + grep过滤(无需额外配置)

如果你觉得开启扩展有点麻烦,用grep反向过滤更直观,新手也容易理解:

ls a_lsst*.txt | grep -vE 'lsst(90|_mono)'

解释:

  • ls a_lsst*.txt先列出所有以a_lsst开头的txt文件;
  • grep -v表示反向匹配(排除符合条件的行);
  • -E启用扩展正则表达式,lsst(90|_mono)表示匹配lsst后面紧跟90或者_mono的字符串,这样就把不需要的文件全部过滤掉了。

方法3:用find命令(适合复杂场景)

如果你的文件很多,或者需要递归查找,find命令会更灵活:

find . -maxdepth 1 -type f -name 'a_lsst*.txt' ! -name '*lsst90*' ! -name '*lsst_mono*'

解释:

  • -maxdepth 1限制只在当前目录查找(不递归子目录);
  • -type f确保只找普通文件(排除目录等);
  • -name 'a_lsst*.txt'先筛选出目标前缀的文件;
  • ! -name '*lsst90*'和! -name '*lsst_mono*'分别排除包含lsst90和lsst_mono的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:16:53