在Linux或Unix系统中,ls命令本身没有直接的参数支持显示条件的取反结果(例如显示“不匹配”某个模式的文件)。但可以通过结合其他命令或技巧实现类似功能。
以下是几种常见方法:
使用find命令配合-not或!
find命令更灵活,支持逻辑取反操作:
find . -maxdepth 1 -type f ! -name "*.txt"  # 显示当前目录下非.txt文件
-maxdepth 1限制只搜索当前目录,-type f限定为文件,!表示取反。
结合grep过滤
通过管道将ls结果传递给grep -v(反向匹配):
ls | grep -v "pattern"  # 显示不包含"pattern"的文件名
需注意:grep -v会匹配所有输出行,包括隐藏文件(如果ls -a被使用)。
使用extglob扩展模式(Bash)
启用Bash的extglob功能后,可以使用复杂模式匹配:
shopt -s extglob
ls !(*.txt)  # 显示所有非.txt文件
此方法仅适用于Bash,且需提前开启extglob选项。
使用ls结合--ignore(部分版本)
某些ls实现(如GNU coreutils)支持--ignore参数:
ls --ignore="*.txt"  # 忽略.txt文件
但并非所有系统都支持该参数,需测试兼容性。
注意事项
- 隐藏文件(以
.开头的文件)默认不被ls显示,需加-a参数。 - 文件名含空格或特殊字符时,建议用
find -print0或ls -q处理。 - 若需递归操作,优先使用
find而非ls。 
想匹配当前目录下“非 .c结尾”的文件
ls *.c可以匹配到所有以*.c结尾的文件,取反操作可以通过一下命令实现:
bash中执行shopt -s extglob命令设定
在执行 ls !(*.c)
shopt是shell内建命令,来控制bash的行为。 
