• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Fertig geladene Dateien in div. Ordnern FTPen, dann löschen

Hallo,

ich suche nach einer Shellskriptlösung für die im
Betreff zusammen gefasste Aufgabe.

1. Alle Unterordner durchsuchen,
2. fertig transferierte Dateien (Änderungsdatum der Datei älter als fünf Minuten) finden,
3. diese Dateien per FTP versenden,
4. die versendete Datei sofort löschen.

Das ganze soll im Endeffekt gecront werden. Vielleicht
müsste man die daher die im Versand befindlichen Dateien
vor dem Versand umbenennen (prefix: "uploading___")
und diese Dateien dann im 2. Schritt auslassen.


Danke für jeden Hinweis, wie das ganze anzugehen ist!

Fox
 
Hallo Fox,

ich baue dir jetzt keine komplette Lösung, die kann man nämlich beliebig komplex und fein ausgestalten. Kann dir aber ein paar Tipps für einen Lösungsansatz geben.

1. Alle Unterordner durchsuchen,
Kannst du mit "find /Ordner -type f -mtime ...." machen. Siehe manpages für find.

2. fertig transferierte Dateien (Änderungsdatum der Datei älter als fünf Minuten) finden,
Älter als 5 Minuten ist ein schwierig zu realisierenden Kriterium. Mit "fuser" oder "lsof" kannst du feststellen, ob eine Datei von
einem anderen Prozess z.B. ftp genutzt wird. Wenn fuser keine Prozessnummer, oder lsof keinen passenden Dateinamen liefert, ist die Datei frei.

3. diese Dateien per FTP versenden,
4. die versendete Datei sofort löschen.
Wenn du die Datei kennst sollte das kein Problem sein.

Die Schleife könnte so aussehen.

Code:
cd /arbeitsverzeichnis/versenden
for datei in `find . -type f`
do
  sts=`fuser -u -f $datei 2> /dev/null | wc -w`
  if [ $sts -eq 0 ]
  then
    echo "Hier kannst du Ftp einbauen und löschen"
  else
    echo "Datei $datei ist gelockt"
  fi
done

Mit lsof müsste der Test so aussehen.

Code:
sts=`lsof -w $datei | wc -c`
oder

Code:
sts=`lsof -w | grep $datei | wc -c`

Nach dem Versand würde ich die Datei in ein anderes (Archiv)-Verzeichnis verschieben, und zwar in eines welches vom find Befehl nicht erreicht wird.
Code:
/arbeitsverzeichnis
  /empfangen
  /versenden
/archivverzeichnis
  /empfangen
  /versandt

Damit kannst du probieren und deine Lösung ausgestalten.

Viel Erfolg
Georg
 
Oben