Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

14 Ordner stehen lassen rest Löschen

6 views
Skip to first unread message

Maximilian Koch

unread,
Apr 8, 2012, 4:09:46 AM4/8/12
to
Hallo NG

ich habe hier ein Script welches in einem Bestimmten Ordner löcht aund immer
die aktuellesten 14 stehenlässt.
funktionieren tut es eigentlich, aber es löscht mir nur immer einen Ordner.
nämlich den 15ten. hätte es 20 Ordner, würde er nicht 6 Stück löschen
soindern nur einen. kann mir jemand weiterhelfen?

*********************************************************
mount ${ordner}
cd ${ordner}

# 14 Ordner bleiben immer stehen, die restlichen werden gelöscht!
for dir in "$(find -maxdepth 1 -mtime +13 -type d)";
do
rm -r "$dir";
done

unmount ${ordner}
**********************************************************

ich dachte mit "for" arbeite ich alle ergebnisse ab..


danke


Stefan Reuther

unread,
Apr 8, 2012, 5:27:16 AM4/8/12
to
Maximilian Koch wrote:
> # 14 Ordner bleiben immer stehen, die restlichen werden gelöscht!
> for dir in "$(find -maxdepth 1 -mtime +13 -type d)";
> do
> rm -r "$dir";
> done
>
> unmount ${ordner}
> **********************************************************
>
> ich dachte mit "for" arbeite ich alle ergebnisse ab..

Tust du auch, allerdings machen die Anführungszeichen um den find-Befehl
aus dessen kompletter Ausgabe ein Ergebnis.

Lass find den Löschbefehl aufrufen.
find -maxdepth 1 -mtime +13 -type d -exec rm -r {} \;
Da übergibt find den Namen direkt an rm, ohne dass zwischendurch nochmal
versucht wird, das irgendwie in eine Shellvariable zu parsen.


Stefan

Maximilian Koch

unread,
Apr 8, 2012, 6:51:27 AM4/8/12
to
> Tust du auch, allerdings machen die Anführungszeichen um den find-Befehl
> aus dessen kompletter Ausgabe ein Ergebnis.
>
> Lass find den Löschbefehl aufrufen.
> find -maxdepth 1 -mtime +13 -type d -exec rm -r {} \;
> Da übergibt find den Namen direkt an rm, ohne dass zwischendurch nochmal
> versucht wird, das irgendwie in eine Shellvariable zu parsen.


Ok, super, das hat wunderbar funktioniert! besten Dank.



roland

unread,
Apr 8, 2012, 7:05:18 AM4/8/12
to
Stefan Reuther schrieb:
> Maximilian Koch wrote:

>> ich dachte mit "for" arbeite ich alle ergebnisse ab..
>
> Tust du auch, allerdings machen die Anführungszeichen um den find-Befehl
> aus dessen kompletter Ausgabe ein Ergebnis.
>
> Lass find den Löschbefehl aufrufen.
> find -maxdepth 1 -mtime +13 -type d -exec rm -r {} \;
> Da übergibt find den Namen direkt an rm, ohne dass zwischendurch nochmal
> versucht wird, das irgendwie in eine Shellvariable zu parsen.
>
>
> Stefan
>

Das klatscht aber vor die Wand, wenn IFS im Verzeichnisname vorkommt. Sprich mit
Leerzeichen im Verzeichnisname wird das an dieser Stelle zerstückelt und führt zu
Fehlern.

xargs ist Dein Freund ;)

find ./ -maxdepth 1 -mtime +13 -type d -print0| xargs -0 rm -r


Stefan Reuther

unread,
Apr 8, 2012, 7:54:02 AM4/8/12
to
roland wrote:
> Stefan Reuther schrieb:
>>Maximilian Koch wrote:
>>>ich dachte mit "for" arbeite ich alle ergebnisse ab..
>>
>>Tust du auch, allerdings machen die Anführungszeichen um den find-Befehl
>>aus dessen kompletter Ausgabe ein Ergebnis.
>>
>>Lass find den Löschbefehl aufrufen.
>> find -maxdepth 1 -mtime +13 -type d -exec rm -r {} \;
>>Da übergibt find den Namen direkt an rm, ohne dass zwischendurch nochmal
>>versucht wird, das irgendwie in eine Shellvariable zu parsen.
>
> Das klatscht aber vor die Wand, wenn IFS im Verzeichnisname vorkommt.

Tut es nicht, da bei -exec kein Shell-/Parse-Schritt beteiligt ist.

> xargs ist Dein Freund ;)
>
> find ./ -maxdepth 1 -mtime +13 -type d -print0| xargs -0 rm -r

'-print0' und 'xargs -0' sind nicht standardisiert.

Der einzige Vorteil, den diese Schreibweise hat, ist, dass mehrere
Verzeichnisse mit einem rm-Prozess abgeräumt werden. Da das Löschen
eines Verzeichnisses aber eh relativ aufwändig ist, wäre mir das an
der Stelle egal. Und ansonsten gibt es 'find ... -exec rm -r {} +',
was immerhin standardisiert ist (aber bei älteren Toolchains nicht
implementiert ist).


Stefan

roland

unread,
Apr 8, 2012, 9:54:33 AM4/8/12
to
Stefan Reuther schrieb:

>> xargs ist Dein Freund ;)
>>
>> find ./ -maxdepth 1 -mtime +13 -type d -print0| xargs -0 rm -r
>
> '-print0' und 'xargs -0' sind nicht standardisiert.
>
> Der einzige Vorteil, den diese Schreibweise hat, ist, dass mehrere
> Verzeichnisse mit einem rm-Prozess abgeräumt werden. Da das Löschen
> eines Verzeichnisses aber eh relativ aufwändig ist, wäre mir das an
> der Stelle egal. Und ansonsten gibt es 'find ... -exec rm -r {} +',
> was immerhin standardisiert ist (aber bei älteren Toolchains nicht
> implementiert ist).
>
>
> Stefan
>

Hast Recht, allerdings verwende ich xargs schon so lange, dass ich betriebsblind
geworden bin.
Rohe Ostern
roland
0 new messages