GNU/Linux >> Linux Esercitazione >  >> Linux

Come aprire o elencare tutti i file il cui nome corrisponde a due modelli in Bash?

Supponiamo di avere una directory con migliaia di file; come posso aprire tutti i file il cui nome contiene sia le stringhe “red” che “green”?

Risposta accettata:

(Supponendo che tu stia cercando nomi di file che contengono entrambi la stringa "rosso" e la stringa “verde”)

Per utilizzare inutilmente bash per testare i nomi dei file rispetto a "rosso" e "verde" usando il =~ operatore di corrispondenza delle espressioni regolari:

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

Per usare la sintassi della shell standard usando case e glob per trovare gli stessi file:

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

Ancora più semplice, con il globbing della tua shell:

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

Esempio di esecuzione:

$ 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. Come scoprire l'elenco di tutte le porte aperte in Linux

  2. Come elencare o ordinare tutti i file per dimensione in Linux

  3. Come personalizzare il completamento automatico di Bash per elencare i file in un'altra directory?

  4. Come elencare i descrittori di file aperti (e i file a cui si riferiscono) nella sessione corrente di Bash?

  5. Come convertire i file di testo in tutto maiuscolo o minuscolo

Come elencare tutti i database in PostgreSQL

Come leggere i file riga per riga in Bash

Come elencare tutti i file ordinati per dimensione in Linux?

Come rimuovere tutti i file che iniziano con una determinata stringa in Linux

Come elencare i descrittori di file aperti (e i file a cui si riferiscono) nella mia attuale sessione bash

Come elencare tutti i file di una partizione su Linux?