mtk*_*mtk 74 ls shell wildcards case-sensitivity
我想列出与某个模式匹配的所有文件,同时忽略大小写。
例如,我运行以下命令:
ls *abc*
Run Code Online (Sandbox Code Playgroud)
我想查看所有将“abc”作为文件名一部分的文件,忽略大小写,例如
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt
Run Code Online (Sandbox Code Playgroud)
我已经在手册页中搜索了案例,但找不到任何内容。
pol*_*mon 73
这实际上是由您的 shell 完成的,而不是由ls.
在 中bash,您将使用:
shopt -s nocaseglob
Run Code Online (Sandbox Code Playgroud)
和然后运行命令。
或在zsh:
unsetopt CASE_GLOB
Run Code Online (Sandbox Code Playgroud)
或者在 yash 中:
set +o case-glob
Run Code Online (Sandbox Code Playgroud)
然后是你的命令。
您可能希望将其分别放入.bashrc、.zshrc或.yashrc。
或者,使用 zsh:
setopt extendedglob
ls -d -- (#i)*abc*
Run Code Online (Sandbox Code Playgroud)
(即在每个通配符的基础上不区分大小写的通配符)
使用 ksh93:
ls -d -- ~(i:*abc*)
Run Code Online (Sandbox Code Playgroud)
您希望通配符以不同的方式工作,而不是ls,因为这些都是lsshell传递给的文件。
jfg*_*956 26
正如polemon 解释的那样,扩展*abc*到文件列表的是shell(而不是ls)。这称为模式匹配。
除了将整个模式匹配行为更改为忽略大小写外,您还可以使用另一种形式的模式匹配而不是*. 以下将在 bash 中执行您想要的操作:
ls *[aA][bB][cC]*
Run Code Online (Sandbox Code Playgroud)
来自 bash 人:
[...] 匹配任何一个封闭的字符。
这允许更细粒度的匹配,您可以使用*[aA][bB]c*匹配abcorABc但不匹配abCor ABC。或者一个法语示例,我可以在其中匹配e字符的所有实例:
ls *[eéèêëEÉÈÊË]*
Run Code Online (Sandbox Code Playgroud)
ARe*_*ddy 13
您还可以添加-i(--ignore-case) 选项grep以获取以下输出。
[root@localhost ~]# ls -l | grep -i abc
-rw-r--r-- 1 root root 0 Feb 25 20:41 fileabc.txt
-rw-r--r-- 1 root root 0 Feb 25 20:41 fileABC.txt
Run Code Online (Sandbox Code Playgroud)
我认为 ls 不可能做到这一点,但您可以改用 find:
find . -maxdepth 1 -iname '*abc*'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95473 次 |
| 最近记录: |