Lösung 1:
rsync über ssh ist wahrscheinlich die beste Wahl mit --remove-source-files
Möglichkeit
rsync -avz --remove-source-files -e ssh /this/dir [email protected]:/remote/dir
ein Schnelltest ergibt;
[[email protected] ~]$ mkdir test1
[[email protected] ~]$ mkdir test2
[[email protected] ~]$ touch test1/testfile.1
[[email protected] ~]$ ls test1/
testfile.1
[[email protected] ~]$ rsync --remove-source-files -av -e ssh test1/testfile.1 [email protected]:/home/tomh/test2/
sending incremental file list
sent 58 bytes received 12 bytes 10.77 bytes/sec
total size is 0 speedup is 0.00
[[email protected] ~]$ ls test1/
[[email protected] ~]$
[[email protected] ~]$ ls test2/
testfile.1
Wie @SvenW erwähnt hat, -e ssh
ist die Standardeinstellung und kann weggelassen werden.
Lösung 2:
Verwenden Sie rsync
statt scp
:
rsync -avz --remove-source-files /sourcedir [email protected]:/targetdir
Mehr Infos mit man rsync
.
Lösung 3:
Diese Frage wurde gut beantwortet und die Antwort wurde akzeptiert, aber da sie oben auf der Titelseite schwebte, dachte ich, ich würde zumindest versuchen, sie genauer, wenn auch weniger elegant, zu beantworten. Ja, Sie können den Rückgabecode von scp
verwenden , und ich mache es oft. In bash
:
scp foo [email protected]:/destination && rm foo
Ich verstehe Ihren Standpunkt zum Kopieren mehrerer Dateien und zum korrekten Umgang mit Fehlern im Stapel, also für mehrere Dateien:
for file in bar*; do scp "$file" [email protected]:/destination && rm "$file" ; done
Letzteres ist nur praktisch, wenn Sie ssh-agent
verwenden , aber ich hoffe sehr, dass Sie es sind.
Lösung 4:
In meiner Situation ist der SSH-Port nicht 22, also
rsync -avz --remove-source-files -e "ssh -p $portNumber" [email protected]:/path/to/files/ /local/path/
funktioniert für mich.
Lösung 5:
Wenn Sie wie ich einen älteren Zielserver haben, können Sie
nicht verwenden--remove-source-files
aber Sie müssen verwenden
--remove-sent-files --protocol=29
stattdessen.