Hallo,
ich habe auf meinem vsftp Server ein Verzeichniss in dem “bekannte” User (User/PW Abfrage) von außen Dateien uploaden können. Diese Inhalte möchte ich gerne alle 30 Minuten per Cron Job in ein so genanntes Transferverzeichniss verschieben. Das eigentliche Verschieben ist mit mv ja kein wirkliches Problem. Nun besteht aber die Forderung, das in dem Transferverzeichniss nach Datum/Uhrzeit des Transfers benannte Verzeichnisse existieren bzw. erstellt werden und zwar nur dann, wenn wirklich auch Daten aus dem Ursprungs FTP-Verzeichniss in das Transferverzeichniss verschoben wurden. Grund ist, das einige Benutzer unterschiedliche Dateien mit gleichem Namen innerhalb weniger Stunden senden und im Transferverzeichniss recht schnell zu sehen wäre welches ist die aktuelle bzw ältere Datei oder Verzeichniss.
Dieses muß über ein Script realisiert werden, so denke ich jedenfalls. Nur habe ich keine Idee wie man dieses komfortabel lösen kann, auch fehlen mir tiefer gehende Programmierkenntnisse.
Danke für eure Hilfe im vorraus.
Gruss
Dirk
Hallo Dirk,
dieses Script sollte deinen Zweck erfüllen:
#!/bin/bash
if test `ls / | wc -w` != 0; then
mkdir //`date +%d-%m-%Y-%H-%M`
mv //* /
fi
Erklärung:
ls / | wc -w
ls gibt die im Verzeichnis enthaltenen Dateien an wc weiter, welches die
Wörter aka Dateien zählt.
test überprüft, ob die Bedingung ungleich 0 erfüllt ist.
Wenn ja wird in der Ordner erstellt.
date liefert die aktuelle Zeit.
%d – Tag
%m – Monat
%Y – Jahr (vierstellig)
%H – Stunde (0-24)
%M – Minute
(s. auch man date)
Der Rest dürfte klar sein.
Eine Prüfung, ob das Verzeichnis schon existiert erübrigt sich, da der Cronjob
alle 30 Minuten ausgeführt wird und das Verzeichnis somit noch nicht
existieren kann.
Unterverzeichnisse werden nicht gesondert behandelt, d.h. sie werden
mitverschoben.
mfg
Rico
Hallo Rico,
danke für deine schnelle Antwort. Die Lösung ist ja manchmal sooo einfach.
Dein Script hat mir sehr geholfen und musste es nur geringfügig anpassen.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#!/bin/bash
if test `ls /home1/wienerberger | wc -w` != 0; then
mkdir /transfer1/wienerberger/`date +%d-%m-%Y-%H-%M`
mv /home1/wienerberger/* /transfer1/wienerberger/`date +%d-%m-%Y-%H-%M`/
fi
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
wie du siehst musste ich nur in der mv-Zeile nochmals das date mitgeben um die Dateien auch wirklich dann in die Verzeichnisse zu bekommen.
Also nochmals Danke
Dirk
Hi all.
Obwohl es sehr unwahrscheinlich ist dass die Minute zwischen beide Befehle ändert, möglich ist es.
Verbesserungsvorschlag:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#!/bin/bash
if test `ls /home1/wienerberger | wc -w` != 0; then
export TARGETDIR=`date +%d-%m-%Y-%H-%M`
mkdir /transfer1/wienerberger/$TARGETDIR
mv /home1/wienerberger/* /transfer1/wienerberger/$TARGETDIR/
fi
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Bye
Con
“wie du siehst musste ich nur in der mv-Zeile nochmals das date mitgeben um
die Dateien auch wirklich dann in die Verzeichnisse zu bekommen.”
Entschuldigung, mein Fehler.
mfg
Rico