[gelöst] rm - was mach ich falsch?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
slu
Beiträge: 2246
Registriert: 23.02.2005 23:58:47

[gelöst] rm - was mach ich falsch?

Beitrag von slu » 28.07.2007 23:42:25

Hi,

ich möchte in bestimmten Unterordnern *.BAK Dateien löschen.

Code: Alles auswählen

wolfserver:/# /bin/rm -i /wolf_server/daten/Konstruktion/*.BAK
/bin/rm: Aufruf von lstat für ,,/wolf_server/daten/Konstruktion/*.BAK" nicht möglich: Datei oder Verzeichnis nicht gefunden
wolfserver:/#
Was mach ich falsch?
Irgendwie steh ich auf dem Schlauch.
Zuletzt geändert von slu am 29.07.2007 14:06:22, insgesamt 1-mal geändert.
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 28.07.2007 23:48:24

du suchst falsch, bzw unter DOS/Windows würde das so funktionieren, unter Linux geht das aber so:

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -iname "*.bak" | xargs rm
so wäre es sogar noch besser:

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -iname "*.bak" -print0 | xargs -0 rm
Gruß
gms

Benutzeravatar
CorvusCoraX
Beiträge: 595
Registriert: 06.09.2004 09:26:56
Wohnort: Wuppertal
Kontaktdaten:

Beitrag von CorvusCoraX » 29.07.2007 00:36:53

...oder...

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -name "*.bak" -exec /bin/rm {} \;
8)
BE SMART. CHOOSE FREEDOM: DEBIAN

Benutzeravatar
markus_b
Beiträge: 355
Registriert: 26.01.2006 04:57:18
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von markus_b » 29.07.2007 00:44:25

Oder noch einfacher:

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -iname "*.bak" -delete
8)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 29.07.2007 00:48:37

CorvusCoraX hat geschrieben:...oder...

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -name "*.bak" -exec /bin/rm {} \;
8)
ja das ist auch gut :)

da kommen aber drei Zeichen hinereinander vor, die ein "Alt Gr" benötigen. Das schaffe ich nicht ohne das 10 Finger System zu verlassen :oops:

Gruß
gms

edit:
markus_b hat geschrieben:Oder noch einfacher:

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -iname "*.bak" -delete
8)
ein "hidden feature" :? seit wann gibts denn diese Option 8O
Ist nicht einmal in der Manpage dokumentiert, wird nur von "find --help" angezeigt

danke, diese Version habe ich noch nicht gekannt

Benutzeravatar
me
Beiträge: 868
Registriert: 30.10.2005 00:14:23
Lizenz eigener Beiträge: GNU General Public License
Wohnort: Paderborn
Kontaktdaten:

Beitrag von me » 29.07.2007 01:08:18

Warum macht die Menschheit es so kompliziert?

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -name *.bak -delete
Wobei ich denke du meinst eher ./wolf_server/daten/Konstruktion/ als /wolf_server/daten/Konstruktion/.
Anytime if we think we were right,
we were maybe wrong.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 29.07.2007 01:12:22

me hat geschrieben:Warum macht die Menschheit es so kompliziert?

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -name *.bak -delete
weil es ohne die Anführungszeichen falsch ist
Siehe:

Code: Alles auswählen

gms1 test # mkdir 1
gms1 test # mkdir 2
gms1 test # touch 1/2.bak
gms1 test # touch 2/1.bak
gms1 test # touch 0.bak
gms1 test # find -name *.bak
./0.bak
gms1 test # find -name *.bak -delete
gms1 test # find -name *.bak
./2/1.bak
./1/2.bak

Benutzeravatar
markus_b
Beiträge: 355
Registriert: 26.01.2006 04:57:18
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von markus_b » 29.07.2007 01:12:48

gms hat geschrieben: ein "hidden feature" :? seit wann gibts denn diese Option 8O
Ist nicht einmal in der Manpage dokumentiert, wird nur von "find --help" angezeigt
Kein "hidden feature"! Lies mal:

Code: Alles auswählen

info find
und staune, was find alles kann 8)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 29.07.2007 01:43:53

markus_b hat geschrieben: Kein "hidden feature"! Lies mal:

Code: Alles auswählen

info find
und staune, was find alles kann 8)
ich glaubs dir einfach :lol:

slu
Beiträge: 2246
Registriert: 23.02.2005 23:58:47

Beitrag von slu » 29.07.2007 10:39:08

Hallo,

danke für eure Zahlreichen Antworten!

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -name *.BAK -print
SIeht gut aus, da kann ich mal ein durchlauf mit -delete starten.

@ gms,

was meinst du mit

Code: Alles auswählen

weil es ohne die Anführungszeichen falsch ist
Siehe: 
Das er dann keine Ordner findet bzw. löscht?
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 29.07.2007 12:02:22

slu hat geschrieben:@ gms,

was meinst du mit

Code: Alles auswählen

weil es ohne die Anführungszeichen falsch ist
Siehe: 
Das er dann keine Ordner findet bzw. löscht?
Nein, sondern dass das " * " nicht von find verarbeitet wird, sondern schon vorher von der Bash expandiert wird.. die Anführungszeichen sind zwingend notwendig, ansonsten kriegst du Effekte hin, die du nicht erklären kannst und unter Umständen Sachen löchst, die du nicht löschen wolltest..

PS: verschoben von Smalltalk
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

slu
Beiträge: 2246
Registriert: 23.02.2005 23:58:47

Beitrag von slu » 29.07.2007 12:07:06

Hi Savar,

danke für deine Antwort.

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -name "*.BAK" -print
...sollte dann die richtige Version sein.
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 29.07.2007 12:45:22

Übrigens geht

Code: Alles auswählen

rm *.bak
wahrscheinlich auch, da es auch von der Bash expandiert wird; es wird dann als

Code: Alles auswählen

rm datei1.bak datei2.bak datei3.bak...
ausgeführt. Wichtig ist nur zu wissen, dass Unixdateisysteme Casesensitive sind; eine Datei "foo.BAK" passt nicht auf "*.bak".

In solchen Fällen, wo du groß/kleinschreibung ignorieren willst, oder du so viele Dateien hast, dass sich die bash beschwert, dass die Zeile zu lang ist, solltest du auf die oben beschriebene find-Methode zugreifen. Beachte jedoch, dass find standardmäßig rekursiv in allen Unterverzeichnissen sucht.

Noch ein Tipp: "*bak" würde ebenso gehen; es sucht alle Dateien, die auf "bak" enden. Der "." in Dateinamen hat in Unixsystemen keine besondere bedeutung; er dient hier nur dazu dass nur "foo.bak" und nicht "blablabak" gemacht wird.

slu
Beiträge: 2246
Registriert: 23.02.2005 23:58:47

Beitrag von slu » 29.07.2007 14:06:03

HI Joghurt,

danke für deinen Beitrag!

In meinem fall ist es ganz gut das Unix gross/kleinschreibung unterscheidet. Ich möchte nämlich wirklich nur *.BAK Dateien löschen.

Dieses werden als Backup von einer Software angelegt aber nicht benötigt und bevor die jeden nach auf die Sicherung kommen werden sie gelöscht...
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

slu
Beiträge: 2246
Registriert: 23.02.2005 23:58:47

Beitrag von slu » 02.08.2007 21:16:04

Hi,

es wäre ja alles so einfach gewesen, aber leider kennt das find unter Sarge den -delete befehl nicht :evil:

Code: Alles auswählen

esel@wolfserver:~$ sudo find /wolf_server/daten/Konstruktion/ -name "*.BAK" -delete -print
find: ung�ltige Option `-delete'
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 02.08.2007 22:02:28

so schwer sind die anderen Alternativen aber auch nicht:

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -type f -name "*.BAK" -exec rm {} \;
find /wolf_server/daten/Konstruktion/ -type f -name "*.BAK" -print0 | xargs -0 rm

slu
Beiträge: 2246
Registriert: 23.02.2005 23:58:47

Beitrag von slu » 03.08.2007 18:30:08

Hi gms,

danke für deine Antwort!
xargs kannte ich noch nicht.

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -type f -name "*.BAK" -print0 | xargs -0 -t rm
Ich hab das mal probiert, hier konnte ich nachvollziehen was passiert.
Leider hab ich hier bei der Ausgabe sofern Dateine gefunden werden auch leerstellen drin, macht das nichts? z.B. ./Erster Ordner/test.BAK

Code: Alles auswählen

find /wolf_server/daten/Konstruktion/ -type f -name "*.BAK" -exec rm {} \;
...bis rm komme ich noch mit das "{} \;" ist mir nicht klar.
Gruß
slu

Das Server Reinheitsgebot:
Debian Bookworm, sonst nichts.

Stolzer Gewinner der Jessie Release Wette:
https://wiki.debianforum.de/Jessie_Release_Wette#SIEGER

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 03.08.2007 19:36:51

slu hat geschrieben:...bis rm komme ich noch mit das "{} \;" ist mir nicht klar.
über die "-exec" Option kannst du ein beliebiges Kommando angeben, welches dann für jede gefundene Datei aufgerufen wird.
dein Kommando kann beliebig lang sein, "find" möchte aber, daß das Ende des Kommndos mit " \;" markiert wird.
"{}" ist der Platzhalter, dort wird von "find" die gefundene Datei eingesetzt.

slu hat geschrieben: Leider hab ich hier bei der Ausgabe sofern Dateine gefunden werden auch leerstellen drin, macht das nichts? z.B. ./Erster Ordner/test.BAK
das ist mit beiden Methoden kein Problem,
wenn du die xargs Methode in Shellscripten verwendest, solltest du noch die Option "-r" angeben. Dann wird, wenn "find" keine Datei findet, auch das "rm" Kommando nicht aufgerufen. Es kommt daher nicht zu so einer unschönen Fehlermeldung:

Code: Alles auswählen

gms1 tmp # find -name "gibtsnicht" -print0 | xargs -0 rm
rm: fehlender Operand
„rm --help“ gibt weitere Informationen.
Bei xargs wird das spezifizierte Kommando nur einmal für alle Dateien aufgerufen, dieses Verhalten kann jedoch über zusätzliche Optionen gesteuert werden Bei "find" mit "-exec" wird das spezifizierte Kommando immer für jede Datei extra aufgerufen.

Gruß
gms

Cologne4711
Beiträge: 260
Registriert: 04.12.2006 11:37:59

Beitrag von Cologne4711 » 03.08.2007 21:01:21

dann habe ich doch noch mal eine Frage

exec startet für jede Datei einen Prozess
xargs startet nur wenige Prozesse

find -delete macht dann was ?

verhält es sich wie exec, xargs oder ist es noch etwas ganz anderes :wink:

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 03.08.2007 21:23:47

Cologne4711 hat geschrieben: find -delete macht dann was ?
verhält es sich wie exec, xargs oder ist es noch etwas ganz anderes :wink:
In diesem Fall kann "find" den Systemcall ( unlink/unlinkat) für das Löschen der Datei selber absetzen.

Gruß
gms

Antworten