Ich möchte eine Aktion ausführen (z. B. chown
) auf alle versteckten Dateien in einem Verzeichnis.
Ich weiß, dass dieser .*
ist nicht eine gute Idee, da es auch den aktuellen .
findet und übergeordneter ..
Verzeichnisse (ich weiß, dass rm
funktioniert nicht mit .
und ..
aber andere Befehle, einschließlich chown
und chmod
, tritt gerne in Kraft)
Aber alle meine versteckten Dateien haben unterschiedliche Namen!
Wie soll ich für alle versteckten Dateien globen, während ich .
ausschließe? und ..
?
Akzeptierte Antwort:
Sie können den folgenden extglob
verwenden Muster:
[email protected](!(.|))
-
.
entspricht einem wörtlichen.
zuerst -
@()
ist einextglob
pattern, stimmt mit einem der darin enthaltenen Muster überein, da wir nur ein Muster darin haben, wird es dieses auswählen -
!(.|)
ist ein weitererextglob
Muster (verschachtelt), das auf jede Datei mit keinem oder einem.
passt; Da wir.
abgeglichen haben Schon beim Start wird dieses ganze Muster auf alle Dateien passen, die mit.
beginnen außer.
und..
.
extglob
ist bei interaktiven Sitzungen von bash
aktiviert standardmäßig in Ubuntu. Wenn nicht, aktivieren Sie es zuerst:
shopt -s extglob
Beispiel:
$ echo [email protected](!(.|))
.bar .foo .spam