Page 1 of 1

find Problem

Posted: 2008-06-29 12:15
by simcen
Hallo Zusammen

Mit dem kleinen Befehl

Code: Select all

find /opt/backup/db/ -type d -mtime +30 -exec rm -vrf '{}' ;
entferne ich alte Backup-Daten.
Die Daten werden auch sauber entfernt, erhalte aber jedes mal ein Fehler auf dem SystemErr:
find: /opt/backup/db/27-05-2008: No such file or directory
Tatsächlich ist dieser Folder auch nicht mehr da, da dieser ja vom find entfernt wurde.

Any ideas? Fehler in der Logik?
Danke für eure Unterstützung und Gruss
Simon

Re: find Problem

Posted: 2008-06-29 12:23
by Roger Wilco
Enthalten die einzelnen Verzeichnisse vielleicht noch Unterverzeichnisse, die von find erst nach dem Löschen des Elternverzeichnisses entfernen will? Hier hilft evtl. die Angabe von -maxdepth 1.
Je nach Anforderung könnte auch der find Parameter -delete für dich interessant sein.

Re: find Problem

Posted: 2008-06-29 12:37
by simcen
Nein, in den Ordner liegen jeweils nur Files.
Hier noch den ganzen Outpout vom Find rot ist StdErr):
removed `/root/test/db/29-05-2008/12_urbanzone.sql.gz'
removed `/root/test/db/29-05-2008/15_janowsky.sql.gz'
removed `/root/test/db/29-05-2008/2_sagex_ch_1.sql.gz'
removed `/root/test/db/29-05-2008/10_gerhard-tschan_ch.sql.gz'
removed `/root/test/db/29-05-2008/simu_test.sql.gz'
removed `/root/test/db/29-05-2008/information_schema.sql.gz'
removed `/root/test/db/29-05-2008/2_sagex_ch_2.sql.gz'
removed `/root/test/db/29-05-2008/ispcp.sql.gz'
removed `/root/test/db/29-05-2008/8_lamaisonbleu_fr.sql.gz'
removed `/root/test/db/29-05-2008/9_hostsolution_gsales_old.sql.gz'
removed `/root/test/db/29-05-2008/roundcubemail.sql.gz'
removed `/root/test/db/29-05-2008/mysql.sql.gz'
removed `/root/test/db/29-05-2008/5_blog_simeli_org.sql.gz'
removed `/root/test/db/29-05-2008/8_lamaisonbleu_fr_dev.sql.gz'
removed `/root/test/db/29-05-2008/5_simeli_org.sql.gz'
removed `/root/test/db/29-05-2008/9_hostsolution_gsales.sql.gz'
removed `/root/test/db/29-05-2008/6_flouri_simcen_net.sql.gz'
removed `/root/test/db/29-05-2008/7_kochblog_dev.sql.gz'
removed directory: `/root/test/db/29-05-2008'
find: /root/test/db/29-05-2008: No such file or directory
-delete kannte ich noch nicht, danke für den Tipp!

Re: find Problem

Posted: 2008-06-29 12:43
by simcen
So, -delete ist tatsächlich einfacher :)

Code: Select all

find /opt/backup/db -mtime +30 -delete
Allerdings musste ich "-type d" entfernen.
Die Aktion "-delete" schaltet "-depth" sein, sprich die Aktion behandelt zuerst die Ordnerinhalte und dann erst das Verzeichnis selber und bei -delete müssen Verzeichnisse leer sein, bevor diese entfernt werden können.

Danke für die Hilfe und schönen Sonntag noch!
LG,
Simon

Re: find Problem

Posted: 2008-06-29 13:51
by Joe User
Mit xargs sollte ebenfalls kein Warning auftreten und auch Verzeichnisse mit Sonderzeichen erfasst werden, zudem sollte es etwas schneller zu Werke gehen:

Code: Select all

find /opt/backup/db/ -type d -mtime +30 -print0 | xargs -0 rm -vrf