Löschen von Dateien mit ftp
Entwickelt ich ein shell-script zum kopieren der Dateien von der Quelle zum Ziel und gleichzeitig, um das löschen der kopierten Dateien in der Quelle an. Ich kann die Dateien kopieren, aber die Dateien können nicht gelöscht werden in der source-Seite.
files='ls filename'
for file in $files
do
ftp -vn $hostname <<EOFD
quote USER $username
quote PASS $password
binary
cd $start_dir
rm -rf $file
quit
EOFD
done
- Ich habe Fehler wie "Keine solchen Dateien oder Verzeichnisse gefunden"
- Indem Sie ftp-außerhalb der forloop auch ich bekam die Fehlermeldung wie "Ungültiger Befehl'
- Ich habe auch versucht in ssh, aber es Eingabeaufforderung für Benutzername und Passwort
Du musst angemeldet sein, um einen Kommentar abzugeben.
Setzen backticks, keine einfachen Anführungszeichen um den Befehl zu seiner Ausgabe.
Ich habe auch versucht in ssh, aber es Eingabeaufforderung für Benutzername und Passwort - check SSH-Login ohne Kennwort.
Scripting, FTP Befehle, die mit input-stream direkt auf
ftp
ist in der Regel eine schlechte Idee: es fehlt jegliche Fehlerbehandlung, kann es gehen, völlig falsch und Sie haben keine chance, es zu kontrollieren. Wenn Sie haben jede chance zu nutzen saner Kommandozeilen-client, wielftp
,curl
oder eine ähnliche skriptfähig ein.Außerdem ist es eine sehr schlechte Idee, zu Durchlaufen Dateien mit
Etwas bessere Lösung ist:
aber nicht skalieren: wenn
*
(oderls
Ausgabe) erweitern würden mehr als Kommandozeilen-Puffer, wird es scheitern. Eine ziemlich skalierbare Lösung ist so etwas wie:...und doch ist es nicht wahrscheinlich, was Sie wollen. In der Tat, wenn Sie nur wollen, um die übertragung von Dateien von der Quelle zum Ziel und löschen Sie dann die Dateien an der Quelle, können Sie einfach
lftp
mitmput
Befehl und-E
option so löschen Sie eine Datei nach der übertragung, oder etwas ähnliches mitrsync --remove-source-files
.Full-proof-Lösung:
Ersetzen Sie die Zeile
mit
Dies ist, weil, an dieser Stelle im code, den Sie auf dem ftp-Konsole, bis die
EOFD
string erreicht ist, so zu laufen, jeden Befehl auf dem lokalen system(Quelle), müssen Sie!
vorangestellt werden.Beste Weg, um zu testen manuell der Ausführung der Befehle. Hier ist, was ich getestet habe:
Oder eine andere Lösung,
verwenden Sie die gleichen for-Schleife wieder, nach der vollständigen ftp erfolgt die Iteration über die selben Dateien und löschen Sie Sie.