Dateien löschen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Dateien löschen

Beitrag von gnude » 08.01.2014 21:09:24

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????

cronoik
Beiträge: 2049
Registriert: 18.03.2012 21:13:42
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Dateien löschen

Beitrag von cronoik » 08.01.2014 21:30:44

Code: Alles auswählen

rm !(1_*)
Hilf mit unser Wiki zu verbessern!

Benutzeravatar
gnude
Beiträge: 1569
Registriert: 14.09.2009 22:05:28
Kontaktdaten:

Re: Dateien löschen

Beitrag von gnude » 08.01.2014 21:32:29

cronoik hat geschrieben:

Code: Alles auswählen

rm !(1_*)
Verdammt
das ist elegant!

was bedeutet die Klammerung? Umkehr? :roll:

Radfahrer

Re: Dateien löschen

Beitrag von Radfahrer » 08.01.2014 21:48:13

Das Ausrufezeichen bewirkt die Umkehr des Ausdrucks, der in den Klammern steht.

Benutzeravatar
lilith2k3
Beiträge: 107
Registriert: 30.05.2007 00:28:05

Re: Dateien löschen

Beitrag von lilith2k3 » 08.01.2014 21:52:39

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

Code: Alles auswählen

rm !1_*  # angenommen !1=whomai wird daraus rm whoami_*

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Dateien löschen

Beitrag von newdeb » 09.01.2014 09:43:23

Nur als Hinweis:
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
extglob gehört zu einer Gruppe von Shelloptionen, die in interaktiven Shells gesetzt sind:

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
extglob wird offenbar bei Aktivierung der Bash-Completion gesetzt:

Code: Alles auswählen

$ grep extglob /usr/share/bash-completion/bash_completion
shopt -s extglob progcomp

Antworten