No puedo entender el uso correcto de buscar con -regex
la opción:
Por ejemplo, dado este ejemplo:
Morcheeba/Big Calm/02 Shoulder Holster.flac
Morcheeba/Big Calm/02. Shoulder Holster.flac
Solo quiero hacer coincidir la cadena en el formulario path/to/file/## filename.ext
, sin el punto.
Lo he probado con:
find Morcheeba/ -regextype egrep -iregex ".*[0-9]{2}*[a-z]*flac$"
y alguna variación, pero siempre obtengo todos los archivos o ninguno.
¿Qué ocurre?
Gracias de antemano.
Respuesta1
Tenga en cuenta que -regex
/ -iregex
(extensiones GNU), como la -path
coincidencia estándar en la ruta completa, no solo en el nombre del archivo.
Si desea buscar archivos cuyosnombre(Opuesto acamino) comienza con 2 dígitos decimales, sigue con algo que no sea un dígito decimal y termina en .flac
, puedes hacerlo de forma portátil:
find . -name '[0-9][0-9][!0-9]*.[fF][lL][aA][cC]'
Tenga en cuenta que no coincidirá 01.flac
porque [!0-9]
no puede coincidir allí. En su lugar podrías escribirlo:
find . -name '[0-9][0-9][!0-9]*' -name '*.[fF][lL][aA][cC]'
Estos usan patrones comodín, no expresiones regulares.
Para usar GNU find
, -iregex
los equivalentes serían:
find . -regextype egrep -iregex '.*/[0-9]{2}[^0-9/][^/]*\.flac'
find . -regextype egrep -iregex '.*/[0-9]{2}([^0-9/][^/]*)?\.flac'
Es decir, anclamos los dos dígitos al principio, ya que nos aseguramos de que el resto de la expresión regular no abarque un archivo /
.
Respuesta2
Según lo sugerido por @steeldriver, la expresión regular .*[0-9]{2}[^.]*\.flac
funcionó correctamente.