![如何列出目录中不以字符L开头的所有文件夹?](https://linux22.com/image/104368/%E5%A6%82%E4%BD%95%E5%88%97%E5%87%BA%E7%9B%AE%E5%BD%95%E4%B8%AD%E4%B8%8D%E4%BB%A5%E5%AD%97%E7%AC%A6L%E5%BC%80%E5%A4%B4%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F.png)
我想列出所有不以L开头的文件夹。
ls [L]* ///gives all the folders starting with L
我想反向搜索并列出所有不以 L 开头的文件夹?
答案1
使用^
:
ls [^L]*
执行您想要的操作 - 好吧,假设ls [L]*
对应于您想要的操作(它列出了以“L”开头的所有内容,而不仅仅是文件夹)。
cuonglm 的回答显示如何将列表限制为文件夹,使用zsh
.
答案2
你用的东西叫做通配,它无法在 POSIX shell 中过滤目录或文件。
和zsh
:
print -rl -- [^L]*(/)
如果你想要隐藏目录:
print -rl -- [^L]*(D/)
正面:
find . ! -name . -prune ! -name 'L*' -type d
答案3
实际上,ls [L]*
(相当于ls L*
)列出了当前目录中非目录且名称以 开头的文件L
,并列出了当前目录中名称以 开头的子目录的内容L
。要列出当前目录中本身不是目录且名称以 开头的文件L
,您需要传递-d
选项:ls -d L*
。
匹配名称不以以下字符开头的文件L
,您可以使用全局模式 [^L]
(也可以写成[!L]
,以与其他 shell 兼容)。[^L]
匹配除 之外的任何一个字符L
,因此[^L]*
匹配以除 之外的任何字符开头的文件名L
。由于文件名不能为空,因此[^L]*
完全匹配不以L
.
或者,如果extended_glob
设置了该选项(大多数用户将其放在 中.zshrc
),您可以使用^
运算符来否定匹配:^L*
匹配不匹配的文件名L*
,即不以 开头的文件名L
。此语法特定于 zsh。