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
Informace o pevném disku za hardwarovým řadičem Raid?
Jak zajistit, aby jakýkoli program fungoval s příkazem Tee?