vom einfachen Programm ..... heisst es in der Beschreibung dieses Abschnittes.
Ich hab ein einfaches Problem und suche eine elegante Lösung.
rm 1_* löscht alle Dateien die mit 1_ anfangen.
Nun möchte ich alle Dateien ausser 1_* löschen.
Man könnte sie kopieren. Klar.
Oder die Zugriffsrechte so ändern das ich sie nicht löschen kann und wieder zurück.
Aber geht es auch Tricky und Elegant????
Dateien löschen
Re: Dateien löschen
Verdammtcronoik hat geschrieben:Code: Alles auswählen
rm !(1_*)
das ist elegant!
was bedeutet die Klammerung? Umkehr?
Re: Dateien löschen
Das Ausrufezeichen bewirkt die Umkehr des Ausdrucks, der in den Klammern steht.
Re: Dateien löschen
Ausrufezeichen ohne Klammern:
http://www.gnu.org/software/bash/manual ... nteraction
Ausrufezeichen mit Klammern:
http://www.linuxjournal.com/content/bas ... d-globbing
Ohne Klammern wird der Ausdruck anders interpretiert: In Deinem Fall wäre es also gleichbedeutend mit
http://www.gnu.org/software/bash/manual ... nteraction
Ausrufezeichen mit Klammern:
http://www.linuxjournal.com/content/bas ... d-globbing
Ohne Klammern wird der Ausdruck anders interpretiert: In Deinem Fall wäre es also gleichbedeutend mit
Code: Alles auswählen
rm !1_* # angenommen !1=whomai wird daraus rm whoami_*
-
- Beiträge: 134
- Registriert: 03.02.2011 11:11:21
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Frankfurt
Re: Dateien löschen
Nur als Hinweis:
In einer nicht-interaktiven Bash muss "extglob" gesetzt werden:
extglob gehört zu einer Gruppe von Shelloptionen, die in interaktiven Shells gesetzt sind:
extglob wird offenbar bei Aktivierung der Bash-Completion gesetzt:
In einer nicht-interaktiven Bash muss "extglob" gesetzt werden:
Code: Alles auswählen
$ touch a b c
$ ls !(a)
b c
$ bash -c 'ls !(a)'
bash: -c: Zeile 0: Syntaxfehler beim unerwarteten Wort `('
bash: -c: Zeile 0: `ls !(a)'
$ bash -O extglob -c 'ls !(a)'
b c
Code: Alles auswählen
$ diff <(shopt) <(bash -c shopt)
6c6
< checkwinsize on
---
> checkwinsize off
16c16
< expand_aliases on
---
> expand_aliases off
18c18
< extglob on
---
> extglob off
24c24
< histappend on
---
> histappend off
Code: Alles auswählen
$ grep extglob /usr/share/bash-completion/bash_completion
shopt -s extglob progcomp