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

如何在Bash的ls命令中转义括号,实现含括号文件的过滤?

解决Bash中ls过滤含括号文件的问题

这个问题的核心在于括号()在Bash中是特殊字符,它们默认被用来表示子shell或者命令替换,所以直接用通配符匹配时需要正确处理这些特殊字符,让Shell把它们当作普通的文件名字符看待。

先分析你之前尝试失败的原因:

  • 执行ls "*).pdf"时,双引号会阻止Shell展开通配符*,所以Shell会直接尝试查找名为*).pdf的字面文件,自然找不到。
  • 执行ls '*\).pdf'时,单引号会把所有内容(包括转义符\)都当作字面字符,Shell会去寻找包含*\).pdf的文件,而你的文件名里并没有\,所以也会报错。

下面是两种可行的解决方法:

方法1:转义特殊字符

既然)是特殊字符,我们可以在它前面加反斜杠\来转义,让Shell把它当作普通字符处理,同时保留*作为通配符的功能:

ls *\).pdf

这个命令中,*会匹配任意字符序列,\)表示字面的),最后匹配.pdf后缀,正好能命中你所有带括号的目标文件。

方法2:部分引用+通配符

如果你觉得转义符号容易混淆,也可以用单引号包裹特殊字符部分,让*留在外面保持通配符功能:

ls *').pdf'

这里*会正常展开匹配前面的字符,')'告诉Shell把)当作普通字符,同样能匹配到目标文件。

另外,如果你想一次性匹配所有a_échéancier相关的PDF文件(包括不带括号的a_échéancier.pdf),可以用更宽泛的通配符:

ls a_échéancier*.pdf

这个命令会匹配所有以a_échéancier开头、.pdf结尾的文件,不管有没有括号,用起来更省事。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:54:32