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 example@unixlinux.online:/remote/dir
ein Schnelltest ergibt;
[example@unixlinux.online ~]$ mkdir test1
[example@unixlinux.online ~]$ mkdir test2
[example@unixlinux.online ~]$ touch test1/testfile.1
[example@unixlinux.onlineorkstation001 ~]$ ls test1/
testfile.1
[example@unixlinux.online ~]$ rsync --remove-source-files -av -e ssh test1/testfile.1 example@unixlinux.online:/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
[example@unixlinux.online ~]$ ls test1/
[example@unixlinux.online ~]$
[example@unixlinux.online ~]$ 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 example@unixlinux.online:/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 example@unixlinux.online:/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" example@unixlinux.online:/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" example@unixlinux.online:/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.