Neu@Shell
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
Hallo,
ich möchte gerne ein Script, welches ich aktuell direkt verwende über FTP verwenden!
So sieht das Originale aus:
| #!/bin/sh
# Ordner mit heutigem Datum erstellten
mkdir /var/media/ftp/uStor01/01_Test/$(date +\%Y-\%m-\%d)
# Alle Dateien aus dem Ordner "Z_Heute" in den Ordner mit dem gerade erstellten (heutigem) Datum verschieben
mv /var/media/ftp/uStor01/01_Test/Z_Heute/* /var/media/ftp/uStor01/Test/$(date +\%Y-\%m-\%d)
#EOF
|
Und aktuell habe ich es so geändert für den FTP zugrifft:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/sh
HOST='IP DES FTP'
USER='USER'
PASSWD='PASS'
PATH='01_Test'
#Login zum FTP
ftp -b $HOST
quote USER $USER
quote PASS $PASSWD
# Ordner mit heutigem Datum erstellten
mkdir $PATH/$(date +\%Y-\%m-\%d)
# Alle Dateien aus dem Ordner "Z_Heute" in den Ordner mit dem gerade erstellten (heutigem) Datum verschieben
mv $PATH/Z_Heute/* $PATH/$(date +\%Y-\%m-\%d)
quit
exit 0
#EOF
|
Ist das so richtig? Und was müsste ich noch angepassen, damit der FTP Login und die "Schritte" ausgeführt werden?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12802
|
Neu@Shell schrieb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/sh
HOST='IP DES FTP'
USER='USER'
PASSWD='PASS'
PATH='01_Test'
#Login zum FTP
ftp -b $HOST
quote USER $USER
quote PASS $PASSWD
# Ordner mit heutigem Datum erstellten
mkdir $PATH/$(date +\%Y-\%m-\%d)
# Alle Dateien aus dem Ordner "Z_Heute" in den Ordner mit dem gerade erstellten (heutigem) Datum verschieben
mv $PATH/Z_Heute/* $PATH/$(date +\%Y-\%m-\%d)
quit
exit 0
#EOF
|
Ist das so richtig?
Nein.
Und was müsste ich noch angepassen, damit der FTP Login und die "Schritte" ausgeführt werden?
Du müsstest die FTP-Kommandos an ftp schicken, z.B. durch ein Here-Doc. Mein ftp kennt auch keinen Schalter "-b". Der mv funktioniert mit FTP natürlich auch nicht. Du müsstest also die Liste der Dateien ermitteln, sie dann herunterladen und danach auf dem FTP-Server löschen. Das ganze wird deutlich einfacher, wenn Du es mit Ruby oder Python machst, die Bibliotheken für das FTP-Handling mitbringen.
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
Danke für die Antwort! Mit Ruby kenne ich mich nicht aus, bin froh das ich das Script hinbekommen habe, aber wenn ich bsp. finde und eure Hilfe habe. Bekommen ich das schon hin... PS.:Das schöne ist, selbst Freetz kann Ruby! Wenn das Script dann funktioniert kann es auch darüber laufen lassen! 😎 Vorteil: Box ist immer an...
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
Leider findet man zu Ruby fast keine Bsp.
Und ich würde es gerne über das Bash Script machen...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | #!/bin/sh
HOST='IP des Servers';
USER='Test1';
PASS='Test2';
PATH='06_TEST';
#Login zum FTP
login_result= ftp_login($HOST, $USER, $PASS);
#Verzeichniswechseln auf dem FTP
ftp_chdir ($HOST, $PATH);
#Ordner mit heutigen Datum erstellen
ftp_mkdir ($HOST, /$(date +\%Y-\%m-\%d));
bye
exit 0
END_SCRIPT
#EOF
|
Ich hoffe Ihr könnt helfen!
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Statt dich damit herumzuschlagen eine FTP-Sitzung in einem Bash-Skript zu steuern könntest du die Freigabe auch mit curlftpfs mounten. Durch das FUSE-Dateisystem kannst du dann die gewohnten Bash-Tools zum Erstellen und kopieren bzw. verschieben von Ordnern und Dateien nutzen.
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
seahawk1986 schrieb:curlftpfs mounten. Problem ist nur das "curlftpfs" aktuell nicht funktioniert mit Freetz!
Habe jetzt "lftp" auf der Box...
Jetzt benötige ich nur Hilfe das Script anzupassen...weil über Google geht es schlecht, der eine Schreibt es so, der Andere so, was ist da dann richtig? Hbe es jetzt auch einfacher vor: 1. der "Z_Heute" Ordner soll über FTP Zugang umbennant werden mit dem heutigen Datum
2. Es soll ein neuer "Z_Heute" Ordner erstellt werden! Wie sollte es dann lauten? Wäre es so richtig?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #!/bin/sh
SERVER='IP DES SERVER';
USER='USERNAME';
PASS='PASSWORT';
PATH='06_Test';
#FTP Login und Liste der Ordner einlesen
lftp -u $USER,$PASS $SERVER; ls $PATH/;
#Ordner "Z_Heute" mit dem heutigen Datum umbennen
RNFR $PATH/Z_Heute;
RNTO $(date +\%Y-\%m-\%d);
#Ordner "Z_Heute" erstellen
mkdir -p $PATH/Z_Heute;
bye;
#EOF
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Verstehe ich das richtig, dass du das Skript auf der Fritzbox laufen lassen willst? Dann ist die Angabe der Ubuntu-Version ja ziemlich irreführend... Neu@Shell schrieb: Habe jetzt "lftp" auf der Box...
Laut der Manpage zu lftp kann das Skript mit dem Argument -e Befehle aus den übergebenen Argumenten (oder mit -f Befehle aus einer Datei ausführen). Die Variable PATH solltest du nicht umdefinieren, die wird von der Shell genutzt, um die ausführbaren Programme zu finden - generell sollte man klein geschriebene Variablen verwenden, damit sowas nicht aus Versehen passiert. Man könnte als z.B. sowas machen: | server='IP DES SERVER'
user='USERNAME'
pass='PASSWORD'
path='06_Test'
lftp "$server" -u "$user","$pass" -e "cd \"$path\" && mv \"Z_Heute\" \"$(date +%Y-%m-%d)\" && mkdir \"Z_Heute\" && exit"
|
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
seahawk1986 schrieb: | server='IP DES SERVER'
user='USERNAME'
pass='PASSWORD'
path='06_Test'
lftp "$server" -u "$user","$pass" -e "cd \"$path\" && mv \"Z_Heute\" \"$(date +%Y-%m-%d)\" && mkdir \"Z_Heute\" && exit"
|
Danke für deine Antwort, das klappt schonmal Super!
Jetzt fehlt nur noch, das Ordner die Älter als 30 Tage sind gelöscht werden.
Hab mal angefangen, ist es so ok?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | #!/bin/sh
server='IP des Server';
user='Username';
pass='Pass';
path1='01_Test';
path2='02_Test';
path3='03_Test';
path4='04_Test';
path5='05_Test';
# Ordner löschen aus dem Ordner "01_Test" die Älter als 30 Tage sind
lftp "$server" -u "$user","$pass" -e find "cd \"$path1\" -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';' && exit"
sleep 480
# Ordner löschen aus dem Ordner "02_Test" die Älter als 30 Tage sind
lftp "$server" -u "$user","$pass" -e find "cd \"$path2\" -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';' && exit"
sleep 480
# Ordner löschen aus dem Ordner "03_Test" die Älter als 30 Tage sind
lftp "$server" -u "$user","$pass" -e find "cd \"$path3\" -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';' && exit"
sleep 480
# Ordner löschen aus dem Ordner "04_Test" die Älter als 30 Tage sind
lftp "$server" -u "$user","$pass" -e find "cd \"$path4\" -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';' && exit"
sleep 480
# Ordner löschen aus dem Ordner "05_Test" die Älter als 30 Tage sind
lftp "$server" -u "$user","$pass" -e find "cd \"$path5\" -maxdepth 1 -mtime +29 -type d -exec rm -rf {} ';' && exit"
#EOF
|
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Laut der Manpage akzeptiert der find Befehl, den lftp zur Verfügung stellt, die von dir genutzten Argumente nicht - das ist kein vollwertiges find, sondern mehr ein Ersatz für ls: find [directory] List files in the directory (current directory by default) recursively. This can help with servers lacking ls -R support. You can redirect output of this command.
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
Also muss ich "nur" den Befehl "list" mit "ls" ersetzen und dann sollte es gehen?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Nein, du musst dir einen anderen Weg überlegen, wie du die alten Ordner loswirst. Laut der Manpage zu lftp scheint es einen Weg über den mirror-Befehl zu geben - dem kann man Argumente mitgeben, so dass er alles, was ein bestimmtes Alter erreicht hat herunterlädt und dann löscht. Das ist natürlich nur praktikabel, wenn auf dem FTP-Server nicht allzuviel an Daten in den jeweiligen Tagesordnern liegt. | server='IP DES SERVER'
user='USERNAME'
pass='PASSWORD'
path='06_Test'
mkdir -p garbage
lftp "$server" -u "$user","$pass" -e "cd \"$path\" && mv \"Z_Heute\" \"$(date +%Y-%m-%d)\" && mkdir \"Z_Heute\" && mirror --older-than=30d --Remove-source-files . garbage/ ; exit"
rm -r garbage
|
Wenn man annimmt, dass du mit leeren Verzeichnissen startest, wäre eine andere Möglichkeit pro Tag genau einen Ordner zu löschen, der 31 Tage in der Vergangenheit liegt, also z.B. (falls das date auf der Fritzbox im Argument -d Textangaben auswerten kann):
| server='IP DES SERVER'
user='USERNAME'
pass='PASSWORD'
path='06_Test'
lftp "$server" -u "$user","$pass" -e "cd \"$path\" && mv \"Z_Heute\" \"$(date +%Y-%m-%d)\" && mkdir \"Z_Heute\" && rm -r $(date -d "now -31 days" +%Y-%m-%d); exit"
|
Falls das date auf der Fritzbox das nicht beherrscht, müsste man auf einem anderen Weg an den Ordnernamen kommen, z.B. indem man in der Shell mit timestamps rechnet:
| delete_dir="$( date -d @"$(( $(date +%s) - $(( 31 * 24 * 3600 )) ))" +%Y-%m-%d)"
lftp "$server" -u "$user","$pass" -e "cd \"$path\" && mv \"Z_Heute\" \"$(date +%Y-%m-%d)\" && mkdir \"Z_Heute\" && rm -r \"$delete_dir\"; exit"
|
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
Ich denke das wäre die Beste Lösung, falls man mal mehr als 1.Ordner hat...
Würde es aber gerne über ein eigenes Script machen und es zu einem Späteren Zeitpunkt starten, damit die Box entlastet wird!:
| server='IP DES SERVER'
user='USERNAME'
pass='PASSWORD'
path='06_Test'
lftp "$server" -u "$user","$pass" -e "cd \"$path\" && rm -r $(date -d "now -31 days" +%Y-%m-%d); exit"
|
Mit dem Datum sollte es eigentlich gehen, den das "alte" Script mit maxdeth geht auch!
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
Ich habe es jetzt mal so wie in dem Post von mir gemacht, aber leider erhalte ich diese Meldung:
| root@fritz:/var/mod/root# /var/media/ftp/Scripte/06_Videos_loeschen.sh
date: invalid date 'now -31 days'
cd ok, cwd=/06_Test
Usage: rm [-r] [-f] files...
|
Also ist die Datumsabfrage noch Flasch...
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11176
Wohnort: München
|
Ich vermute, dass das date auf der Fritzbox das einfach nicht kann - die Version, die busybox beiliegt (was gerne für Systeme mit knappen Ressourcen genutzt wird) kann das z.B. prinzipiell nicht.
|
Neu@Shell
(Themenstarter)
Anmeldungsdatum: 5. Februar 2019
Beiträge: 10
|
Leider haben wir noch keine Lösung gefunden, wie man auf dem FTP Ordner löschen kann die älter als 30 Tage sind
|