GNU/Linux >> Znalost Linux >  >> Linux

Jak otevřít nebo vypsat všechny soubory, jejichž název odpovídá dvěma vzorům v Bash?

Předpokládejme, že mám adresář s tisíci souborů; jak mohu otevřít všechny soubory, jejichž název obsahuje řetězce „červený“ i „zelený“?

Přijatá odpověď:

(Za předpokladu, že hledáte názvy souborů které obsahují obě řetězec „červená“ a řetězec „zelený“)

Chcete-li nesmyslně používat bash k testování názvů souborů proti „červené“ a „zelené“ pomocí =~ operátor shody regulárního výrazu:

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

Chcete-li použít standardní syntaxi shellu pomocí case a globs k nalezení stejných souborů:

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

Ještě jednodušší, s kulmováním vaší mušle:

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

Ukázkový běh:

$ 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. Jak vypsat nebo seřadit všechny soubory podle velikosti v Linuxu

  2. Smazat všechny soubory v adresáři, jejichž jméno neodpovídá řádku v seznamu souborů?

  3. Jak vypsat všechny soubory, které byly nainstalovány balíčkem Apt?

  1. Jak přizpůsobit automatické doplňování Bash tak, aby vypisovalo soubory v jiném adresáři?

  2. Jak vypsat popisy otevřených souborů (a soubory, na které odkazují) v aktuální relaci Bash?

  3. Jak vypsat všechny přihlášené uživatele

  1. Jak rekurzivně vypsat všechny soubory a adresáře

  2. Jak vypsat seznam otevřených deskriptorů souborů (a souborů, na které odkazují) v mé aktuální relaci bash

  3. Jak vypsat všechny soubory oddílu na linuxu?