Ty *_*oum 4 command-line bash wildcards
在我的目录中,我有一个具有不同扩展名的文件列表,例如
file-abc-12.out
file-abc-12.csv
file-abc-12.txt
file-xyz-12.out
file-xyz-12.csv
file-xyz-12.txt
file-abc-04.out
file-abc-04.csv
file-abc-04.txt
file-xyz-04.out
file-xyz-04.csv
file-xyz-04.txt
Run Code Online (Sandbox Code Playgroud)
如果我只想列出包含 abc 并以 .out 结尾的文件,我该怎么做。我想执行ls或find使用两种模式匹配搜索*abc*和*out。我一次只知道如何搜索一个或另一个,我如何让它搜索具有这两个条件的文件名?
小智 5
这会给你你想要的:
$ find . -name '*abc*' -o -name '*out'
Run Code Online (Sandbox Code Playgroud)
我将问题中使用的“和”解释为严格的“逻辑与”,即“查找名称与和 *abc*都匹配的文件*out”。
您可以在一个文件名通配模式中使用多个通配符:
$ ls *abc*out
Run Code Online (Sandbox Code Playgroud)
或者
$ find . -type f -name "*abc*out"
Run Code Online (Sandbox Code Playgroud)
例如。
该模式*abc*out将匹配包含该字符串abc并以 结尾的任何名称out。
如果没有文件与该模式匹配,则该模式将保持未展开状态。如果发生这种情况,ls将获取模式*abc*out作为参数而不是有效的文件名,并会抱怨ls: cannot access *abc*out: No such file or directory.
要bash显示有关无法扩展文件通配模式的错误,而不是将未扩展的模式传递给ls,请设置failglobshell 选项:
bash-4.4$ ls *abc*out
ls: *abc*out: No such file or directory
bash-4.4$ shopt -s failglob
bash-4.4$ ls *abc*out
bash: no match: *abc*out
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9300 次 |
| 最近记录: |