rm -r .* (erledigt)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Ozelot
Beiträge: 1507
Registriert: 18.11.2007 09:52:58

rm -r .* (erledigt)

Beitrag von Ozelot » 28.12.2016 04:58:42

Mir fällt gerade auf, daß es im Forum gar keine Kategorie für Probleme mit einfachen Shell-Kommandos gibt. Ich nehme daher mal "Scripting" - bessere Vorschläge? "Standardprogramme"?

Hier das Problem: Löschen von vielen versteckten Verzeichnissen in einem ansonsten leeren Ordner. Ein

Code: Alles auswählen

rm -rf *
gibt da einen Fehler aus, weil es nicht aufgelöst werden kann. Und wenn man probeweise noch eine unversteckte Datei erzeugt, läuft der Befehl zwar durch, aber die versteckten Verzeichnisse bleiben erhalten. Ein

Code: Alles auswählen

rm -rf .*
traue ich mich nicht - könnte das auf .. anspringen und höhere Verzeichnisse löschen? Das wurde jedenfalls hier vermutet:
viewtopic.php?f=27&t=58185

Wie mache ich das richtig?
Zuletzt geändert von Ozelot am 29.12.2016 06:32:43, insgesamt 1-mal geändert.

DeletedUserReAsG

Re: rm -r .*

Beitrag von DeletedUserReAsG » 28.12.2016 06:34:56

traue ich mich nicht - könnte das auf .. anspringen und höhere Verzeichnisse löschen?
nein:

Code: Alles auswählen

niemand@arch_T400:~/delme$ mkdir .blub
niemand@arch_T400:~/delme$ rm -rf .*
rm: Entfernen von '.' Verzeichnis '..' nicht möglich: '.' wird übersprungen
rm: Entfernen von '.' Verzeichnis '..' nicht möglich: '..' wird übersprungen
** 1 **
niemand@arch_T400:~/delme$ ls -a
.  ..

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: rm -r .*

Beitrag von Meillo » 28.12.2016 08:56:17

Alternativ kannst du sowas wie .??* verwenden, das trifft alle Dateien, die einen Punkt und mindestens zwei weitere Zeichen haben. In den seltensten Faellen gibt es versteckte Dateien, die ausser dem Punkt nur ein weiteres Zeichen haben. Genauer (aber auch umstaendlicher zu tippen) waere: .[!.]*


btw: Interessanterweise expandiert die mksh ..* nicht:

Code: Alles auswählen

$ ls -d ..*
ls: cannot access ..*: No such file or directory
waehrend die bash das tut:

Code: Alles auswählen

$ ls -d ..*
..
Ebenso enthaelt .* in der mksh kein . oder .., was sich in der Manpage auch so wiederfindet:
Note that mksh (and pdksh) never matches ‘.’ and ‘..’, but
AT&T UNIX ksh, Bourne sh, and GNU bash do.

Note that none of the above pattern elements match either a
period (‘.’) at the start of a file name or a slash (‘/’),
even if they are explicitly used in a [..] sequence; also,
the names ‘.’ and ‘..’ are never matched, even by the pat‐
tern ‘.*’.
Use ed once in a while!

Ozelot
Beiträge: 1507
Registriert: 18.11.2007 09:52:58

Re: rm -r .*

Beitrag von Ozelot » 29.12.2016 06:32:25

Danke!

Antworten