> 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命令找不到任何东西?
发布于 2017-11-22 13:00:58
使用find's -regex选项查找从1到11的带有数字后缀的文件名:
find . -type f -regex ".*/chr\([1-9]\|1[01]\)\.fasta"
-regex模式文件名与正则表达式模式匹配。这是整个路径上的匹配,而不是搜索。
发布于 2018-02-05 17:00:12
before{1..3}after是一个zsh大括号扩展运算符(现在也被其他shell所支持),如果不引用它,则扩展为几个参数:before1after、before2after、before3after,然后传递给命令。
正如您引用的那样,{1..11}是左asis,而find's -name通配符匹配操作符并不专门处理这些{1..11},因此它只查找名为chr{1..11}.fasta的文件。
即使没有引用,find也不知道该如何处理:
find . -name chr1.fasta chr2.fasta...要使它有用,就必须:
find . \( -name chr1.fast -o -name chr2.fasta... \)您不能直接使用{x..y}操作符来实现这一点。
在这里,在这种情况下,您可以:
find . \( -name 'chr[1-9].fast -o -name 'chr1[01].fasta' \) ...或者,如果您的find实现支持它们,则等效regexp。
或者您可以使用zsh的S高级递归全局:
printf '%s\n' **/chr<1-11>.fasta这也将与chr01.fasta或chr011.fasta匹配,为您提供排序列表并跳过隐藏目录。
发布于 2017-11-22 12:48:59
将{}改为[],因此:
find . -name '*chr[1-11].fasta'https://unix.stackexchange.com/questions/406273
复制相似问题