GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo abrir o enumerar todos los archivos cuyo nombre coincide con dos patrones en Bash?

Supongamos que tengo un directorio con miles de archivos; ¿Cómo puedo abrir todos los archivos cuyo nombre contiene las cadenas "rojo" y "verde"?

Respuesta aceptada:

(Suponiendo que está buscando archivos nombres que contienen ambos la cadena "rojo" y la cadena "verde")

Para usar inútilmente bash para probar los nombres de archivo contra 'rojo' y 'verde' usando el =~ operador de coincidencia de expresión regular:

for f in *
do
  [[ $f =~ red && $f =~ green ]] && echo Bash: yes: "$f" || echo Bash: no: "$f"
done

Para usar la sintaxis de shell estándar usando case y globos para encontrar los mismos archivos:

for f in *
do 
  case "$f" in
    *green*red*|*red*green*) echo Case: yes: $f;; 
    *) echo Case: no: $f;; 
  esac
done

Aún más simple, con el englobamiento de tu caparazón:

printf "Glob: %sn" *green*red* *red*green*

Ejecución de muestra:

$ touch a b aredgreenb agreenredb agreenbred aredbgreen red green redgreen greenred

$ for f in *
>     do
>       [[ $f =~ red && $f =~ green ]] && echo Bash: yes: "$f" || echo Bash: no: "$f"
>     done
Bash: no: a
Bash: yes: agreenbred
Bash: yes: agreenredb
Bash: yes: aredbgreen
Bash: yes: aredgreenb
Bash: no: b
Bash: no: green
Bash: yes: greenred
Bash: no: red
Bash: yes: redgreen


$ for f in *
>     do
>       case "$f" in
>         *green*red*|*red*green*) echo Case: yes: $f;;
>         *) echo Case: no: $f;;
>       esac
>     done
Case: no: a
Case: yes: agreenbred
Case: yes: agreenredb
Case: yes: aredbgreen
Case: yes: aredgreenb
Case: no: b
Case: no: green
Case: yes: greenred
Case: no: red
Case: yes: redgreen

$ printf "Glob: %sn" *green*red* *red*green*
Glob: agreenbred
Glob: agreenredb
Glob: greenred
Glob: aredbgreen
Glob: aredgreenb
Glob: redgreen

Linux
  1. Cómo averiguar la lista de todos los puertos abiertos en Linux

  2. ¿Eliminar todos los archivos en un directorio cuyo nombre no coincide con una línea en una lista de archivos?

  3. ¿Cómo enumerar todos los archivos que han sido instalados por un paquete Apt?

  4. ¿Cómo enumerar los descriptores de archivos abiertos (y los archivos a los que se refieren) en la sesión actual de Bash?

  5. Cómo convertir archivos de texto a mayúsculas o minúsculas

Cómo enumerar todas las bases de datos en PostgreSQL

Cómo leer archivos línea por línea en Bash

¿Cómo enumerar todos los archivos ordenados por tamaño en Linux?

Cómo enumerar todos los archivos en un recurso compartido de red SMB de Windows

¿Cómo encontrar / enumerar todos los archivos únicos en dos directorios?

Cómo enumerar los descriptores de archivos abiertos (y los archivos a los que se refieren) en mi sesión bash actual