Emparejar múltiples patrones con ls

Emparejar múltiples patrones con ls

Me gustaría obtener una lista de registros de errores en el directorio actual para usar en un script externo, los registros se determinan con el patrón FAIL en el nombre del archivo, por lo que he estado usando un FAIL* para alimentar mis archivos de script para abrir y proceso. Sin embargo, para cada archivo FAIL existen dos tipos, un archivo comprimido y otro sin comprimir. Sólo quiero abrir el archivo sin comprimir.

¿Es posible encadenar encontrar FAIL* pero no si existe *.gz/bz2/lo que sea?

Respuesta1

Puede probar la presencia de una expresión regular para esas extensiones:

for file in *FAIL*; do [[ ! $file =~ .(bz2|gz) ]] && printf "%s\n" "$file"; done

Insertar advertencia obligatoria sobreno analizarls...

Respuesta2

Si usa el findcomando, puede omitir los archivos que terminan en la extensión .gzasí:

$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL
-rw-rw-r--. 1 saml saml 0 Oct 15 22:42 FAIL.gz

$ find . -name "*FAIL*" ! -name "*.gz"
./FAIL

También puedes filtrar lsla salida de esta manera:

$ ls *FAIL* | grep -v '.gz'
FAIL

Pero generalmente es aconsejable no analizar lsla salida, ya que no está estructurada para que sea propicio para hacerlo.

información relacionada