Vielen Dank!
Ich versuch das mal zu interpretieren, um eben nach und nach mal mehr hinter die Logik zu kommen - wenn ich darf?
Eine Korrektur der Interpretation wäre super!
Code:
FTP_FOLDERS_LIST="/tmp/ftp-folders.tmp"
OLD_FILES_LST="/tmp/old-ftp-files.tmp"
Hier verstehe ich, ich erstelle Variablen und gebe den Speicherort dafür an.
Nicht ganz. Ich erstelle eine Variable mit dem Wert eines Dateinamens.
Wann immer ich die Variable später verwende, wird somit die Datei benutzt.
Code:
find /home -iname ftp > $FTP_FOLDERS_LIST
Er sucht im home Verzeichnis nach Ordnern die "ftp" im Namen haben und befüllt damit die Variable. (was bewirkt das -i ?)
Er sucht Einträge im Directory mit genau dem Namen "ftp" (case-insensitive) und schreibt das Ergebnis in den Wert der Variablen $FTP_FLODERS_LIST (hier /tmp/ftp-folders.tmp.
Code:
while read FOLDER; do
find "$FOLDER" -ctime 28 > $OLD_FILES_LIST
while read FILE; do
rm "$FILE"
done < $OLD_FILES_LIST
done < $FTP_FOLDERS_LIST
Hier komm ich ein wenig ins Straucheln.
Solange er Ordner einliest, soll er die Variable Folder finden (?) und wenn die Zeit von 28 (woher weiß er das Tage gemeint sind?) rum sind, verschiebt er sie in die variable O_F_L ?
Bei dem Abschnitt stolpere ich doch noch ordentlich
Die Schleife bekommt als Eingabe die gerade erstellte Datei. (die gefundenen Ordner namens ftp im $HOME.) Jeder Wert wird als $FOLDER weiterverarbeitet.
Dann werden mit der find-Anweisung Dateien gesucht, die älter als 28 tage sind.
Das ist im find-befehl so definiert. (siehe "man 1 find")
Jeder Treffer wird in eine weitere Datei geschrieben, wie auch schon beim ersten find-Befehl. Dannach kommt die nächste Schleife, die die zu löschen Dateien einliest und auch löscht.
Code:
rm $FTP_FOLDERS_LIST
rm $OLD_FILES_LIST
Löschen der erstellten Liste oder Variable.
Naja, eigentlich löschen der datei, aber da das script dann auch am Ende ist, sind die Variablen auch nicht mehr existent.
Ein Verbesserungvorschlag wäre in dem ersten find-befehl direkt nur auf directories zu prüfen und im zweiten Ausdruck den find-Befehl nur files suchen zu lassen und direkt zu löschen.
Das ist aber alles Geschmackssache, funktionieren sollte beides.
Code:
#! /bin/bash
FTP_FOLDERS_LIST="/tmp/ftp-folders.tmp"
find /home [b]-type d[/b] -iname ftp > $FTP_FOLDERS_LIST
while read FOLDER; do
find "$FOLDER" [b]-type f[/b] -ctime 28 [b]-exec rm {} \;[/b]
done < $FTP_FOLDERS_LIST
rm $FTP_FOLDERS_LIST
Vielleicht sollte man auch noch über eine "-maxdepth 2" nachdenken, um nicht zu tief in den $HOMES zu suchen und event. zu löschen.