find Problem

Bash, Shell, PHP, Python, Perl, CGI
simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

find Problem

Post by simcen » 2008-06-29 12:15

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

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: find Problem

Post by Roger Wilco » 2008-06-29 12:23

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.

simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

Re: find Problem

Post by simcen » 2008-06-29 12:37

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!

simcen
Posts: 333
Joined: 2003-02-12 14:35
Location: Bern, Schweiz

Re: find Problem

Post by simcen » 2008-06-29 12:43

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

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: find Problem

Post by Joe User » 2008-06-29 13:51

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
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.