FTP mit wput nur vorhandene Dateien im Ziel kopieren
Hallo,
ich habe Dateien auf einer Windows Maschine und Dateien auf einer Linux Maschine im gleichen Netzwerk.
Nun möchte ich von Windows per FTP Script nur die vorhandenen Dateien auf Linux ersetzen.
Beispiel:
Windows Verzeichnis
a.pdf
b.pdf
c.pdf
d.pdf
e.pdf
Linux Verzeichnis
b.pdf
d.pdf
e.pdf
Kopiert werden sollen die Dateien b.pdf d.pdf e.pdf
Ist dafür wput richtig?
Wie stelle ich das an?
Gruss Otto
ich habe Dateien auf einer Windows Maschine und Dateien auf einer Linux Maschine im gleichen Netzwerk.
Nun möchte ich von Windows per FTP Script nur die vorhandenen Dateien auf Linux ersetzen.
Beispiel:
Windows Verzeichnis
a.pdf
b.pdf
c.pdf
d.pdf
e.pdf
Linux Verzeichnis
b.pdf
d.pdf
e.pdf
Kopiert werden sollen die Dateien b.pdf d.pdf e.pdf
Ist dafür wput richtig?
Wie stelle ich das an?
Gruss Otto
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 357570
Url: https://administrator.de/contentid/357570
Ausgedruckt am: 22.11.2024 um 18:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo Otto,
Üblicherweise unterscheidet Linux zwischen Groß-/Klein-Schreibung bei Dateinamen und Windows nicht.
Windows Verzeichnis
Ein_Ordner\b.pdf
Anderer_Ordner2\B.pdf
Linux Verzeichnis
Ein_Ordner1\b.pdf
Ein_Ordner1\B.pdf
Denk mal drüber nach, ob das in Deiner Situation zu Schwierigkeiten führen könnte.
Ein Weg wäre per Skript ein "dir" des ftp-Verzeichnisses auszuführen und dann dessen Ausgabe filtern, um gezielt die ausgegebenen Dateinamen beim Kopieren von Windows nach Linux zu nutzen.
wput kannst Du gut zum Kopieren einsetzen, aber für ein Directorylisting kannst Du es, glaube ich, nicht nutzen.
Vielleich fällt mir dazu noch was ein.
Gruß Frank
Zitat von @Otto1699:
Nun möchte ich von Windows per FTP Script nur die vorhandenen Dateien auf Linux ersetzen.
Ein allgemeiner Hinweis:Nun möchte ich von Windows per FTP Script nur die vorhandenen Dateien auf Linux ersetzen.
Üblicherweise unterscheidet Linux zwischen Groß-/Klein-Schreibung bei Dateinamen und Windows nicht.
Windows Verzeichnis
Ein_Ordner\b.pdf
Anderer_Ordner2\B.pdf
Linux Verzeichnis
Ein_Ordner1\b.pdf
Ein_Ordner1\B.pdf
Denk mal drüber nach, ob das in Deiner Situation zu Schwierigkeiten führen könnte.
Ein Weg wäre per Skript ein "dir" des ftp-Verzeichnisses auszuführen und dann dessen Ausgabe filtern, um gezielt die ausgegebenen Dateinamen beim Kopieren von Windows nach Linux zu nutzen.
wput kannst Du gut zum Kopieren einsetzen, aber für ein Directorylisting kannst Du es, glaube ich, nicht nutzen.
Vielleich fällt mir dazu noch was ein.
Gruß Frank
Hallo Otto,
Mit WinSCP könntest Du das Listing erledigen lassen.
Aufruf (WinSCP.com)
Download https://winscp.net
Skript.txt (Das statische Skript)
Mindestens Zeile 3 und 4 anpassen.
Liste.txt (Beispiel einer erzeugten Ausgabedatei)
Diese Datei kannst Du mit
Upload.cmd (Das "Master"-Skript)
Dateinamen.txt (Beispiel einer erzeugten Dateiliste)
Falls Deine
Falls Du Fragen hast, lass Dich nicht abhalten.
Gruß Frank
Mit WinSCP könntest Du das Listing erledigen lassen.
Aufruf (WinSCP.com)
winscp.com /script=Skript.txt>Liste.txt
Skript.txt (Das statische Skript)
option batch on
option confirm off
open ftp://Benutzername:Kennwort@ftp.meinftpserver.de:21 -passive=on
cd /mein_ftp_ordner/
ls
close
exit
Liste.txt (Beispiel einer erzeugten Ausgabedatei)
batch on
reconnecttime 120
confirm off
Connecting to ftp.meinftpserver.de ...
Connected
Starting the session...
Session started.
Active session: [1] Benutzername@ftp.meinftpserver.de
/mein_ftp_ordner
D--------- 0 0 ..
-rw-r--r-- 0 1091693 1101 4081 Dec 8 20:15:02 2017 b.pdf
-rw-r--r-- 0 1091693 1101 2231 Dec 8 20:15:02 2017 d.pdf
-rw-r--r-- 0 1091693 1101 5204 Dec 8 20:15:02 2017 e.pdf
Session 'Benutzername@ftp.meinftpserver.de' closed.
No session.
find
und for
parsen und eine auf Dateinamen reduzierte Datei erzeugen.Upload.cmd (Das "Master"-Skript)
@echo off
if exist Liste.txt del Liste.txt
if exist Dateinamen.txt del Dateinamen.txt
winscp.com /script=Skript.txt>Liste.txt
for /f "skip=1 tokens=10" %%d in ('find Liste.txt ".pdf"') do (
echo %%d>>Dateinamen.txt
)
REM Dateinamen.txt für den Upload nutzen
REM Hier fehlt also noch Code
Dateinamen.txt (Beispiel einer erzeugten Dateiliste)
b.pdf
d.pdf
e.pdf
Falls Deine
x.pdf
Leerzeichen im tatsächlichen Dateinamen haben sollten, muss zumindest tokens
noch angepasst werden.Falls Du Fragen hast, lass Dich nicht abhalten.
Gruß Frank
Hallo Otto,
Funktionert Dein Skript soweit, dass
in der
?
Die jetzige For-Schleife zerlegt die Ausgabezeilen in Teilstücke (Tokens).
Die Trennung findet bei den Leerzeichen statt, wobei eines oder aufeinanderfolgende gleich behandelt werden.
Jede Zeile hat hier 9 Tokens zzgl. der Dateinamen, die auch in ein oder mehrere Tokens zerlegt werden.
Normalerweise wird der erste Token der angegebenen Variablen (hier
Der zweite Token erhält den folgenden Buchstaben, also
Die Angabe
Er wird dann der angegebenen Variablen (hier
Man kann auch mehrere Token explizit angeben.
Das würde hier zu folgender Zuordnung führen:
Mit
Das funktioniert aber nur wie gewünscht, wenn der Dateiname lediglich ein Trennstelle enthält und diese nur durch ein einziges Leerzeichen gebildet wird.
aber
Beide Schwierigkeiten lassen sich leicht umgehen.
Die Tokenliste sollte so aussehen:
Es wird das 9. Token der angegebenen Variabel zugeordnet und
Das 9. Token interessiert hier nicht, aber eben der Zeilen Rest, der mit dem 10. Token nicht unbedingt vollständig wäre.
Hier die angepasste For-Schleife
(a und b belegen, aber lediglich b nutzen.)
Gruß Frank
Zitat von @Otto1699:
Leerzeichen oder mehrere sind in den Dateinamen. Bekomme es mit dem token nicht hin.
Würdest du mir nochmal helfen.
Leerzeichen oder mehrere sind in den Dateinamen. Bekomme es mit dem token nicht hin.
Würdest du mir nochmal helfen.
Funktionert Dein Skript soweit, dass
184203
in der
Dateinamen.txt
ladet, statt184 G-99992000.pdf203 G-12342000.pdf
?
Die jetzige For-Schleife zerlegt die Ausgabezeilen in Teilstücke (Tokens).
Die Trennung findet bei den Leerzeichen statt, wobei eines oder aufeinanderfolgende gleich behandelt werden.
Jede Zeile hat hier 9 Tokens zzgl. der Dateinamen, die auch in ein oder mehrere Tokens zerlegt werden.
Normalerweise wird der erste Token der angegebenen Variablen (hier
%%d
) zugeordnet.Der zweite Token erhält den folgenden Buchstaben, also
%%e
usw.Die Angabe
tokens=10
weist an, dass nur der 10. Token genutzt werden soll.Er wird dann der angegebenen Variablen (hier
%%d
) zugeordnet.Man kann auch mehrere Token explizit angeben.
tokens=10,11
Das würde hier zu folgender Zuordnung führen:
%%d=203%%e=G-12342000.pdf
Mit
%%d %%e
könnte man sich dann 203 G-12342000.pdf
zusammen basteln.Das funktioniert aber nur wie gewünscht, wenn der Dateiname lediglich ein Trennstelle enthält und diese nur durch ein einziges Leerzeichen gebildet wird.
203 G-12342000.pdf => %%d=203 und %%e=G-12342000.pdf
%%d %%e => 203 G-12342000.pdf
203 G-12342000.pdf => %%d=203 und %%e=G-12342000.pdf
%%d %%e => 203 G-12342000.pdf
Fehler: 203 G-12342000.pdf != 203 G-12342000.pdf
Beide Schwierigkeiten lassen sich leicht umgehen.
Die Tokenliste sollte so aussehen:
tokens=9,*
Es wird das 9. Token der angegebenen Variabel zugeordnet und
*
bedeutet, dass der Rest der Zeile (unverändert) genutzt wird, der hier in der nächsten Variablen landet.Das 9. Token interessiert hier nicht, aber eben der Zeilen Rest, der mit dem 10. Token nicht unbedingt vollständig wäre.
Hier die angepasste For-Schleife
for /f "skip=1 tokens=9,*" %%a in ('find Liste.txt ".pdf"') do (
echo %%b>>Dateinamen.txt
)
Gruß Frank
Hallo Otto,
Gern geschehen und Du hast jetzt bis Neujahr Zeit, das Skript so zu ändern, dass es ohne die Hilfsdateien auskommt.
(Falls Du Spaß daran haben solltest.)
Gruß Frank
Gern geschehen und Du hast jetzt bis Neujahr Zeit, das Skript so zu ändern, dass es ohne die Hilfsdateien auskommt.
(Falls Du Spaß daran haben solltest.)
Gruß Frank