首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找命令似乎不适用于文件名范围。

查找命令似乎不适用于文件名范围。
EN

Unix & Linux用户
提问于 2017-11-22 12:38:29
回答 3查看 532关注 0票数 0
代码语言:javascript
复制
> ls
    chr10_canu.fasta  chr11.fasta      chr2_canu.fasta  chr3.fasta       chr5_canu.fasta  chr6.fasta       chr8_canu.fasta  chr9.fasta
    chr10.fasta       chr1_canu.fasta  chr2.fasta       chr4_canu.fasta  chr5.fasta       chr7_canu.fasta  chr8.fasta       circoletto_pbs.sh
    chr11_canu.fasta  chr1.fasta       chr3_canu.fasta  chr4.fasta       chr6_canu.fasta  chr7.fasta       chr9_canu.fasta
> find . -name "chr{1..11}.fasta"

为什么find命令找不到任何东西?

EN

回答 3

Unix & Linux用户

发布于 2017-11-22 13:00:58

使用find's -regex选项查找从111的带有数字后缀的文件名:

代码语言:javascript
复制
find . -type f -regex ".*/chr\([1-9]\|1[01]\)\.fasta"

-regex模式文件名与正则表达式模式匹配。这是整个路径上的匹配,而不是搜索。

票数 0
EN

Unix & Linux用户

发布于 2018-02-05 17:00:12

before{1..3}after是一个zsh大括号扩展运算符(现在也被其他shell所支持),如果不引用它,则扩展为几个参数:before1afterbefore2afterbefore3after,然后传递给命令。

正如您引用的那样,{1..11}是左asis,而find's -name通配符匹配操作符并不专门处理这些{1..11},因此它只查找名为chr{1..11}.fasta的文件。

即使没有引用,find也不知道该如何处理:

代码语言:javascript
复制
find . -name chr1.fasta chr2.fasta...

要使它有用,就必须:

代码语言:javascript
复制
find . \( -name chr1.fast  -o -name chr2.fasta... \)

您不能直接使用{x..y}操作符来实现这一点。

在这里,在这种情况下,您可以:

代码语言:javascript
复制
find . \( -name 'chr[1-9].fast -o -name 'chr1[01].fasta' \) ...

或者,如果您的find实现支持它们,则等效regexp。

或者您可以使用zsh的S高级递归全局:

代码语言:javascript
复制
printf '%s\n' **/chr<1-11>.fasta

这也将与chr01.fastachr011.fasta匹配,为您提供排序列表并跳过隐藏目录。

票数 0
EN

Unix & Linux用户

发布于 2017-11-22 12:48:59

将{}改为[],因此:

代码语言:javascript
复制
find . -name '*chr[1-11].fasta'
票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/406273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档