buscar: expresión regular en el nombre

buscar: expresión regular en el nombre

supongamos que escribo:

find . -regex "[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"

Me parece que este comando debería funcionar. He iterado a través de las diversas opciones de regextype y varios formatos de expresiones regulares, pero no puedo lograr que este tipo de expresiones regulares funcionen a través de find. ¿Hay algo simple en lo que me estoy equivocando con respecto a la búsqueda y el analizador de expresiones regulares?

Respuesta1

Find -nameno acepta expresiones regulares (esto se usó en la versión original de la pregunta). Se necesitan globos de shell, y ese no es un globo de shell válido. Desea utilizar la -regexprueba, pero también debe indicarle que utilice expresiones regulares extendidas o cualquier otro tipo que comprenda las notaciones {N}y . foo|barFinalmente, a diferencia de -name, la -regexprueba analiza el nombre de ruta completo, por lo que necesitas algo como esto:

$ find . -regextype posix-extended -regex ".*/[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz" -printf "%f\n"
5678-34-56-bar.csv.gz
1234-12-12-foo.csv.gz

Si quieres usar -name, puedes hacer:

find . \( \
       -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-foo.csv.gz" \
    -o -name "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-bar.csv.gz" \
       \) -printf "%f\n"

Respuesta2

Otra opción es la fdherramienta:

fd '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'

https://github.com/sharkdp/fd

Respuesta3

Si tiene nombres de archivos razonables (al menos en esta carpeta), podría ejecutar algo como

 find . | grep -E '[0-9]{4}-[0-9]{2}-[0-9]{2}-(foo|bar).csv.gz'

De esta manera podrá beneficiarse de la variedad de opciones de grep.

información relacionada