find per -exec doppelt ausführen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
josh97
Beiträge: 23
Registriert: 20.12.2005 10:29:47
Lizenz eigener Beiträge: GNU General Public License

find per -exec doppelt ausführen

Beitrag von josh97 » 23.06.2006 12:25:23

Tag auch zusammen ;-)

Ich bin leider nicht ganz schlau geworden aus meinen Such Versuchen zu folgender
Aufgabenstellung:

Durchsuche eine Verzeichnisstruktur nach tmp Ordnern.
Wenn Du einen gefunden hast lösche alle Files älter als X Tage.

Mein Lösungsansatz:

Code: Alles auswählen

find ">Ausgangsverzeichnis<"  -type d -maxdepth 5 -name tmp -ok find . -ctime +"X" {} \; 
führt zu dieser Meldung:

Code: Alles auswählen

< find ... "../../../.."/tmp > ? y
find: paths must precede expression
Usage: find [path...] [expression] 
bei "../../../.." steht natürlich ein korrekter Pfad ;-)

-ok hab ich genommen um eben die Meldungen beim testen gleich sehen
zu können usw. :-)

Im Endeffekt möchte ich nach den tmp Verzeichnissen suchen und dann gleich eine
weitere Suche nach Files die mind. X Tage alt sind durchführen und die dann wiederum
löschen....( also dann nach dem -ctime +X noch

Code: Alles auswählen

-exec rm -vf {} \
anhängen...)

Achtung die Platzhalter in dem Beispiel werden natürlich mit korrektem Inhalt
gefüllt (es werden keine Variablen eingefügt werden). hab ich nur für das
Posting in "" gepackt!

Ist die mehrfache find Ausführung mit -exec überhaupt möglich?
Bzw. eine mehrfache -exec Ausführung an sich?

Wahrscheinlich gehts viel einfacher....
bin halt noch nicht sehr Firm mit der Script Programmierung :-(

gruss und danke schonma!

josh

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Beitrag von SubOptimal » 25.06.2006 10:09:09

Hi Josh,

hier mal zwei mögliche Lösungen. Abhängig was Du genau suchst.

Code: Alles auswählen

find .  -path '*/tmp/*' -maxdepth 5 -ctime +10
- suche vom aktuellen Verzeichnis ausgehend nach Dateien die in einem Unterverzeichnis tmp liegen
- steige dazu maximal in Verzeichnisebene 5 hinab
- zeige die Dateien an, die älter als 10 Tage sind

Das sucht auch in Unterverzeichnissen (bis zur angegebenen Verzeichnistiefe) in einem tmp Verzeichnis.

Willst Du keine Unterverzeichnisse in einem tmp Verzeichnis beachten dann ändere die Suche so ab.

Code: Alles auswählen

find .  -path '*/tmp/*' -prune -maxdepth 5 -ctime +10
SubOptimal

josh97
Beiträge: 23
Registriert: 20.12.2005 10:29:47
Lizenz eigener Beiträge: GNU General Public License

Beitrag von josh97 » 26.06.2006 15:07:49

Vielen Dank Suboptimal!

Deine Antwort war alles andere als Suboptimal :D , sondern sehr hilfreich, denn
es macht leicht modifiziert genau das was ich wollte!

vielen Dank dafür! 8)

gruss
josh

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 26.06.2006 16:19:43

Hi,

könnte auch so gehen, nur so als zusätzlichen Denkansatz. Nur halb ausprobiert.

Suchen:

Code: Alles auswählen

find / -type d -name tmp  | xargs -i find {} -type f -ctime +10
Löschen:

Code: Alles auswählen

find / -type d -name tmp  | xargs -i find {} -type f -ctime +10 | xargs rm

Antworten