PDA

View Full Version : FTP: Wie arbeitet der Befehl PUT?



Gerd/400
11-03-11, 05:12
Guten Abend zusammen.
Wir hatten heute folgendes Problem: Wir übertragen eine Datei DATEN.DAT von einem Kundenrechner zu einem Server eines Online-Portals. Die Übertragung erfolgt per FTP mit einem einfachen PUT. Seit gestern Nachmittag funktionierte die Übertragung plötzlich nicht mehr - im FTP Log stand etwa "Datei .in.DATEN.DAT bereits vorhanden". Auf dem Server fand ich diese Datei tatsächlich und auch eine ältere Version unserer Datei. Mutig und nach vorheriger Sicherung löschte ich die Datei .in.DATEN.DAT und die nächste Übertragung funktionierte wieder. Ich nehme daher an das der Befehl PUT die Dateien unter einem anderen Namen überträgt und dann umbenennt. Gefunden habe ich hierzu nichts (nach einer zugegeben schnellen und kurzen Suche) aber ich hätte gerne Gewissheit. Kann jemand hierzu etwas sagen?
Gerd

Fuerchau
11-03-11, 07:42
Um eine Datei per PUT zu ersetzen muss die Option Replace angegeben werden:

put myfile (replace

Die Option wird wirklich mit Klammerauf angegeben.
Es erfolgt kein umbenennen. Im Falle eines Übertragungsabbruches steht eben nur der Teil der übertragenen Daten im Ziel.

Pikachu
11-03-11, 08:13
PUT ersetzt die ferne Datei, mit APPEND kann man an die ferne Datei anhängen. (REPLACE gibt es soweit ich weiß nur beim GET.

Fuerchau
11-03-11, 09:49
Ach ja, stimmt.
Allerdings benötigt man die Berechtigung zum Ersetzen auf dem Zielsystem, sonst bricht der PUT ab.

Gerd/400
11-03-11, 11:45
Vielen Dank für die schnellen Antworten aber vielleicht habe ich mich falsch ausgedrückt. Im FTP-LOG war zu lesen das die Datei DATEN.DAT nicht übertragen werden konnte weil die Datei .in.DATEN.DAT bereits vorhanden sei. Im Zielverzeichnis des Servers waren tatsächlich 2 Dateien - "DATEN.DAT" und ".in.DATEN.DAT". Die 2. Datei hiess tatsächlich so, mit dem Punkt am Anfang (Ich habe sie noch!) und enthielt Daten die wir üblicherweise übertragen. Da diese Datei ja irgendwo hergekommen sein muss nehme ich an, dass der PUT-Befehl bei einer Übertragung eine Datei unter einem temporären Namen überträgt und nach erfolgter Übertragung umbenennt. Weiss da jemand etwas dazu?
Gerd

Fuerchau
11-03-11, 12:57
Normal ist das nicht.
Ich habe schon zu diversen FTP-Servern Dateien übertragen, nie wurde ein "temporärer" Name verwendet.
War die Übertragung unvollständig abgebrochen, war auch der Inhalt der Datei ein Fragment.

Schau noch mal in deine Scripte, ob du das nicht selber machst.
Da die Daten meist nicht unvollständig verarbeitet werden dürfen, aber ein auf dem Server laufender Job während der Übertragung ggf. die Datei bereits verarbeiten könnte, gehe ich auch häufig diesen Weg.
"put" in eine temporärere Datei, den Namen geben ich selber vor, mit anschließendem "ren" der Datei.
Allerdings prüfe ich vorher mit "ls", ob die echte Zieldatei noch vorhanden ist.