[gelöst] Rekursives Löschen
-
- Beiträge: 2186
- Registriert: 18.09.2005 15:52:02
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
[gelöst] Rekursives Löschen
Mahlzeit,
ich scheine irgendwie gerade bild zu sein, oder so... Ich habe eine sehr großes Verzeichnis mit vielen Unterordnern. Sagen wir der Einfachheit halber, es wären überall wav-Dateien drin und in jedem Verzeichnis auch ein paar jpgs. Wie bitte werde ich diese jpgs los, ohne dass ich in jedes Verzeichnis selber gucken muss? Ich find die Möglichkeit zum rekursiven Löschen nicht...
Kann mir vielleicht jemand eben helfen?
jhr
ich scheine irgendwie gerade bild zu sein, oder so... Ich habe eine sehr großes Verzeichnis mit vielen Unterordnern. Sagen wir der Einfachheit halber, es wären überall wav-Dateien drin und in jedem Verzeichnis auch ein paar jpgs. Wie bitte werde ich diese jpgs los, ohne dass ich in jedes Verzeichnis selber gucken muss? Ich find die Möglichkeit zum rekursiven Löschen nicht...
Kann mir vielleicht jemand eben helfen?
jhr
Zuletzt geändert von jhr-online am 26.12.2005 13:55:19, insgesamt 1-mal geändert.
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
auf eigene Gefahr:
Code: Alles auswählen
find /pfad/zum/oberverzeichnis -type f -name "*.jpg" -exec rm {} \;
-
- Beiträge: 2186
- Registriert: 18.09.2005 15:52:02
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
so steht der Aufruf nach dem ersten match
markus
so nichtSavar hat geschrieben:auf eigene Gefahr:Code: Alles auswählen
find /pfad/zum/oberverzeichnis -type f -name "*.jpg" -exec rm {} \;
Code: Alles auswählen
find /pfad/zum/oberverzeichnis -type f -name "*.jpg" -exec rm '{}' \;
-
- Beiträge: 2186
- Registriert: 18.09.2005 15:52:02
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Kann ich nicht bestätigen, Markus. Ich hab das, so wie savar geschrieben hat, ausgeführt und kann jetzt keine jpgs mehr finden...
jhr
//edit: Wo wir gerade dabei sind: Kann man eigentlich auch "falschherum" suchen? Wenn ich also einen Musikordner mit mp3s und wmas (entschuldigt, Windows-überbleisel) hab, dass er mir alle Dateien anzeigt, die nicht diesen Typs sind, sodass ich dadurch Unregelmäßigkeiten finden kann?
jhr
//edit: Wo wir gerade dabei sind: Kann man eigentlich auch "falschherum" suchen? Wenn ich also einen Musikordner mit mp3s und wmas (entschuldigt, Windows-überbleisel) hab, dass er mir alle Dateien anzeigt, die nicht diesen Typs sind, sodass ich dadurch Unregelmäßigkeiten finden kann?
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13
- I.C.Wiener
- Beiträge: 674
- Registriert: 19.08.2003 18:45:35
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
ja - worst case hast du aber braces in dem/den filenamen und die shell interpretiert diese - wenn das nicht der fall ist wird es durchlaufenjhr-online hat geschrieben:Kann ich nicht bestätigen, Markus. Ich hab das, so wie savar geschrieben hat, ausgeführt und kann jetzt keine jpgs mehr finden...
siehe
Code: Alles auswählen
man find
- I.C.Wiener
- Beiträge: 674
- Registriert: 19.08.2003 18:45:35
Aus Interesse habe ich gerade mal etwas gelesen und folgendes gefunden.
Bei mir wird jedoch das ! von der Bash immer interpretiert und irgendwas eingefügt und dann schlägt der Befehl fehl.
-not scheint so auch nicht zu funktionieren.
Interessant ist die Möglichkeit aber schon. Funktioniert das bei jemandem?
MfG
Code: Alles auswählen
find /shared -name *.doc -and ! -perm -006 -exec chmod 666 { } \;
-not scheint so auch nicht zu funktionieren.
Interessant ist die Möglichkeit aber schon. Funktioniert das bei jemandem?
MfG
Who is... LAIN?
- Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
zwischen den geschweiften Klammern darf KEIN Zeichen sein..
"{ }" - falsch
"{}" - richtig..
was meandtheshell meint gilt nur für die
/edit: was heißt schon "darf" ich denke es ist besser wenn da keines steht.. in der manpage ist da kein Zeichen zwischen..
das "!" kannst du vielleicht per \ Escapen.. also
"{ }" - falsch
"{}" - richtig..
was meandtheshell meint gilt nur für die
Code: Alles auswählen
-exec command {} +
Option und nicht für (stört aber nicht)
-exec command {} ;
das "!" kannst du vielleicht per \ Escapen.. also
Code: Alles auswählen
\!
- I.C.Wiener
- Beiträge: 674
- Registriert: 19.08.2003 18:45:35
Hatte es nur von http://amitsharma.linuxworld.com/how_to_find.htm kopiert (ganz unten.
In meinem Beispiel funktioniert nichtmal
Ich schreibe immer
Whatever, ich hatte gar keine {} in meinem nicht funktionierenden Beispiel.
funktioniert jetzt bei mir. hatte einen Denkfehler...
MfG
In meinem Beispiel funktioniert nichtmal
Code: Alles auswählen
-name *.doc
Code: Alles auswählen
-name "*.doc"
Code: Alles auswählen
find ./ -type f ! -name "*.mp3"
MfG
Who is... LAIN?
-
- Beiträge: 2186
- Registriert: 18.09.2005 15:52:02
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Ich probiere auch gerade rum... Das klappt so auch nicht... hmmSavar hat geschrieben:das "!" kannst du vielleicht per \ Escapen.. also
Code: Alles auswählen
\!
//edit: Das nenn ich Überschneidung... so klappt's

Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13
-
- Beiträge: 2186
- Registriert: 18.09.2005 15:52:02
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Hat sich erledigt... Erst denken, dann schreiben - ich weiß!Danke für die Hilfe!
jhr
Code: Alles auswählen
find ./ ! -name "expr1" ! -name "expr2"
jhr
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13
- meandtheshell
- Beiträge: 4054
- Registriert: 14.01.2005 17:51:30
@savar
Du bist ein lustiger Fink
Nun da wir lustig gechattet haben und du mich nun auch irritiert hast ...
1)
den fallbraces mit Leerzeichen dazwischen gibt es gar nicht
@ihr-online
2)
Die Option -name und deren Parameter *.doc bleiben über.
Um zu erreichen das nicht die bash den Parameter *.doc interpretiert sondern, dass dieser zusammen mit der Option -name an find weiter gereicht wird musst du quoten ("*.doc")
http://www.linuxfibel.de/bash.htm#Quoting
3)
Für folgenden fall sieht die syntax für alle enthaltenen Parameter keine braces vor Somit ist es logisch das durch NICHT vorhanden sein kein Fehler entstehen konnte.
4)
es steht alles weiß auf schwarz in den man pages zu find - kein grund wie die Hühner zu gackern womit einer den anderen verwirrt.
markus
Du bist ein lustiger Fink

Nun da wir lustig gechattet haben und du mich nun auch irritiert hast ...
1)
den fall
Code: Alles auswählen
{whitespace between braces}
@ihr-online
2)
Code: Alles auswählen
-name "*.doc"
- du hast hier als command "find"
- als Argument jedes dem command folgende token auf der command line wobei
- ein durch ein vorangestelltes "-" das Argument zu einer Option wird
- alle anderen Argumente zu Parametern
Die Option -name und deren Parameter *.doc bleiben über.
Um zu erreichen das nicht die bash den Parameter *.doc interpretiert sondern, dass dieser zusammen mit der Option -name an find weiter gereicht wird musst du quoten ("*.doc")
http://www.linuxfibel.de/bash.htm#Quoting
3)
Für folgenden fall sieht die syntax für alle enthaltenen Parameter keine braces vor
Code: Alles auswählen
find ./ -type f ! -name "*.mp3"
- die negation ist POSIX standart und auch in find implementiert - siehe man find ---> Operators - boolsche "Operationen" mit find sind natürlich möglich.
- ein quoten ist nicht notwendig - siehe syntax man find
4)
es steht alles weiß auf schwarz in den man pages zu find - kein grund wie die Hühner zu gackern womit einer den anderen verwirrt.
markus