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

Linux下如何列出除指定文件外的所有文件?含排除1_开头文件场景

如何在Linux中排除指定文件/模式列出文件?

我来帮你梳理几种在Linux下实现这类需求的实用方法,分通用场景和你提到的具体情况逐一说明:

一、通用场景:排除少数指定文件列出所有文件

如果只是需要排除几个明确的文件名,或者某一类模式的文件,下面这些方法都能轻松搞定:

  • ls + grep 反向匹配:这是最直观的组合方式,利用grep -v做反向过滤。比如要排除file1.txt和file2.log,可以用:

    ls | grep -vE "(file1.txt|file2.log)"
    

    其中-E启用扩展正则表达式,方便同时匹配多个目标。

  • find命令(更灵活的递归/非递归选择):如果需要更精细的控制(比如只找文件、不递归子目录),find是更好的选择。比如当前目录下排除temp.csv:

    find . -maxdepth 1 -type f ! -name "temp.csv"
    

    要是排除多个文件,就用括号组合条件(记得转义):

    find . -maxdepth 1 -type f ! \( -name "a.txt" -o -name "b.jpg" \)
    
  • Bash扩展Glob(原生简洁写法):先开启Bash的扩展glob功能(默认可能没开):

    shopt -s extglob
    

    之后就能用!()语法排除指定模式,比如排除doc*和pdf*开头的文件:

    ls !(doc*|pdf*)
    

    这种写法不需要管道,运行效率更高。

二、具体场景:列出所有不以1_开头的文件

针对你提到的目录里有1_1.xyt、1_2.xyt、2_1.xyt这类文件,要筛选出不以1_开头的内容,推荐这几种简便方法:

方法1:ls + grep快速过滤

直接用正则匹配行首排除1_:

ls | grep -v "^1_"

解释:^表示匹配文件名的开头,-v表示反向选择,也就是把所有以1_开头的文件名排除掉。

方法2:find命令精准控制

如果需要区分文件和目录,或者避免递归子目录,用find更稳妥:

find . -maxdepth 1 ! -name "1_*"

要是只想列出文件(不包括目录),加上-type f:

find . -maxdepth 1 -type f ! -name "1_*"

方法3:Bash扩展Glob简洁写法

先确保开启了扩展glob(前面提过的shopt -s extglob),然后直接执行:

ls !(1_*)

这个命令会直接列出当前目录下所有不匹配1_*模式的内容,非常清爽。

方法4:Zsh用户专属简化

如果你用的是Zsh,它默认支持反向匹配,不用额外配置,直接用:

ls ^1_*

^符号在这里就代表反向匹配,简单直白。

内容的提问来源于stack exchange,提问作者Venkata S S K M Chaitanya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:51:39