Los comandos de búsqueda parecen no funcionar con el rango de nombres de archivos.

Los comandos de búsqueda parecen no funcionar con el rango de nombres de archivos.
> 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"

¿Por qué el findcomando no encuentra nada?

Respuesta1

UsarfindLa -regexopción de buscar los nombres de archivos con sufijo numérico de 1a 11:

find . -type f -regex ".*/chr\([1-9]\|1[01]\)\.fasta"

-regex patrón
El nombre del archivo coincide con la expresión regular.patrón. Esta es una coincidencia en todo el camino, no una búsqueda.

Respuesta2

before{1..3}afteres un operador de expansión de llaves zsh (ahora también compatible con algunos otros shells) quecuando no se citase expande a varios argumentos: before1after, before2after, before3afterque luego se pasan al comando.

Como lo estás citando, {1..11}se deja así y el operador de coincidencia findde -namecomodines no los trata {1..11}de manera especial, por lo que solo busca archivos con nombres literales chr{1..11}.fasta.

Incluso si lo dejaras sin comillas, findno sabrías qué hacer con:

find . -name chr1.fasta chr2.fasta...

Para que sea útil tendría que ser:

find . \( -name chr1.fast  -o -name chr2.fasta... \)

y no puedes usar el {x..y}operador para lograrlo directamente.

Aquí, en este caso, podrías hacer:

find . \( -name 'chr[1-9].fast -o -name 'chr1[01].fasta' \) ...

O el equivalente de expresiones regulares si su findimplementación los admite.

O podrías usar zshel globbing recursivo avanzado de :

printf '%s\n' **/chr<1-11>.fasta

que también coincidiría con chr01.fastao chr011.fasta, le brindará una lista ordenada y omitirá directorios ocultos.

Respuesta3

Cambie {} a [] y así:

find . -name '*chr[1-11].fasta'

información relacionada