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

 在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 -print0ls -q处理。
  • 若需递归操作,优先使用find而非ls

想匹配当前目录下“非 .c结尾”的文件

ls *.c可以匹配到所有以*.c结尾的文件,取反操作可以通过一下命令实现:

bash中执行shopt -s extglob命令设定

在执行 ls !(*.c)

shopt是shell内建命令,来控制bash的行为。 ​

此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注