ls显示条件的取反结果(bash中条件取非操作)

data-ad-format="fluid" data-ad-layout-key="-7k+ex-4a-9w+4a">

在Linux或Unix系统中,ls命令本身没有直接的参数支持显示条件的取反结果(例如显示“不匹配”某个模式的文件)。但可以通过结合其他命令或技巧实现类似功能。

以下是几种常见方法:

使用find命令配合-not或!

find命令更灵活,支持逻辑取反操作:

1
2
find . -maxdepth 1 -type f ! -name "*.txt"  # 显示当前目录下非.txt文件

-maxdepth 1限制只搜索当前目录,-type f限定为文件,!表示取反。

结合grep过滤

通过管道将ls结果传递给grep -v(反向匹配):

1
2
ls | grep -v "pattern"  # 显示不包含"pattern"的文件名

需注意:grep -v会匹配所有输出行,包括隐藏文件(如果ls -a被使用)。

使用extglob扩展模式(Bash)

启用Bash的extglob功能后,可以使用复杂模式匹配:

1
2
3
shopt -s extglob
ls !(*.txt) # 显示所有非.txt文件

此方法仅适用于Bash,且需提前开启extglob选项。

使用ls结合–ignore(部分版本)

某些ls实现(如GNU coreutils)支持–ignore参数:

1
2
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的行为。 ​

data-ad-format="auto" data-full-width-responsive="true">