Řešení 1:
rsync přes ssh je pravděpodobně vaše nejlepší sázka s --remove-source-files
možnost
rsync -avz --remove-source-files -e ssh /this/dir [email protected]:/remote/dir
dá rychlý test;
[[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
Jak zmínil @SvenW, -e ssh
je výchozí, takže jej lze vynechat.
Řešení 2:
Použijte rsync
místo scp
:
rsync -avz --remove-source-files /sourcedir [email protected]:/targetdir
Další informace s man rsync
.
Řešení 3:
Tato otázka byla zodpovězena v pořádku a odpověď byla přijata, ale protože se vznášela nahoře na titulní stránce, řekl jsem si, že se na ni alespoň pokusím odpovědět přesněji, i když méně elegantně. Ano, můžete použít návratový kód z scp
a dělám to často. V bash
:
scp foo [email protected]:/destination && rm foo
Beru váš názor na více souborů, které je třeba zkopírovat a správně zpracovat selhání v zásobníku, takže pro více souborů:
for file in bar*; do scp "$file" [email protected]:/destination && rm "$file" ; done
Toto poslední je praktické pouze v případě, že používáte ssh-agent
, ale velmi doufám, že ano.
Řešení 4:
v mé situaci není port ssh 22, takže
rsync -avz --remove-source-files -e "ssh -p $portNumber" [email protected]:/path/to/files/ /local/path/
funguje pro mě.
Řešení 5:
pokud máte starší cílový server jako já, nemůžete použít
--remove-source-files
ale musíte použít
--remove-sent-files --protocol=29
místo toho.