Globbing

 
 
  • Viele Befehle können mehrere Dateien auf einmal verarbeiten
  • Dateien einzeln aufzählen wird schnell nervig

Ganz schlecht:

 ~ $ ls
witzig1.jpg witzig2.jpg witzig3.jpg
 ~ $ chmod a+r witzig1.jpg
 ~ $ chmod a+r witzig2.jpg
 ~ $ chmod a+r witzig3.jpg
 ~ $  
 
 

Besser:

 ~ $ ls
witzig1.jpg witzig2.jpg witzig3.jpg
 ~ $ chmod a+r witzig1.jpg witzig2.jpg witzig3.jpg
 ~ $  
 
 

Super:

 ~ $ ls
witzig1.jpg witzig2.jpg witzig3.jpg
 ~ $ chmod a+r *.jpg
 ~ $  
 
 
 ~ $ ls 
a1.jpg a10.jpg a11.jpg a2.jpg a3.jpg a4.jpg
 ~ $  
  • "*"
    Beliebig viele beliebige Zeichen
 ~ $ ls a1*.jpg
a1.jpg a10.jpg a11.jpg
 ~ $  
  • "?"
    Ein beliebiges Zeichen
 ~ $ ls a1?.jpg
a10.jpg a11.jpg
 ~ $  
  • "[abc]"
    Ein Zeichen aus der Menge
 ~ $ ls a[245].jpg
a2.jpg a4.jpg
 ~ $  
 
 

Ohne Match wird das Argument unverändert übernommen.

  • Match
    gefundene Dateien werden übernommen
 ~ $ echo a1*.jpg
a1.jpg a10.jpg a11.jpg
 ~ $  
  • kein Match
    Argument bleibt unverändert
 ~ $ echo b1*.jpg
b1*.jpg
 ~ $  

Anmerkung: Dieses Verhalten lässt sich mit der Shelloption nullglob beeinflussen.

 
 
  • Dateien, die mit "." beginnen sind versteckt
  • Shell Globbing ignoriert die "Dotfiles"
  • Punkt muss explizit genannt werden
 ~ $ echo .*
. .. .bash_history .bash_profile .bashrc
 ~ $  

Achtung bei ".*": Der aktuelle Ordner (".") sowie der darüberliegende ("..") matchen auch!

rm -r .* löscht das gesamte Verzeichnis und das darüberliegende gleich mit.

 
 
 ~ $ ls 
a1.jpg a10.jpg a11.jpg a2.jpg a3.jpg a4.jpg
 ~ $  
  • "!(pattern)"
    Pattern ausschließen
 ~ $ echo !(a2).jpg
a10.jpg a11.jpg a1.jpg a3.jpg a4.jpg
 ~ $  
  • "!(pattern|pattern)"
    mehrere Patterns ausschließen
 ~ $ echo a!(1*|2).jpg
a3.jpg a4.jpg
 ~ $  
  • ".!(|.)"
    Dotfiles ohne "." und ".."
 ~ $ echo .!(|.)
.bash_history .bash_profile .bashrc
 ~ $  

Anmerkung: Für Extended Globbing muss die Shelloption extglob eingeschaltet sein.

 
 

Brace Expansion hat starke Ähnlichkeit mit Globbing aber die angegebenen Dateinamen müssen nicht existieren.

 ~ $ ls 
a1.jpg a10.jpg a11.jpg a2.jpg a3.jpg a4.jpg
 ~ $  
  • "{name1,name2}"
    Alternativen aufzählen
 ~ $ echo a{2,10}.jpg
a2.jpg a10.jpg
 ~ $  
 
 

Als nächstes: Scripting