Answers:
通过ssh进行rsync可能是您最好的--remove-source-files
选择
rsync -avz --remove-source-files -e ssh /this/dir remoteuser@remotehost:/remote/dir
快速测试
[tomh@workstation001 ~]$ mkdir test1
[tomh@workstation001 ~]$ mkdir test2
[tomh@workstation001 ~]$ touch test1/testfile.1
[tomh@workstation001 ~]$ ls test1/
testfile.1
[tomh@workstation001 ~]$ rsync --remove-source-files -av -e ssh test1/testfile.1 tomh@localhost:/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
[tomh@workstation001 ~]$ ls test1/
[tomh@workstation001 ~]$
[tomh@workstation001 ~]$ ls test2/
testfile.1
如@SvenW所述,-e ssh
它是默认设置,因此可以省略。
smv() { rsync -az --remove-source-files "$@"; }
到我的工具箱中。谢谢。
这个问题的答案很好,答案也可以接受,但是因为它浮在首页的顶部,所以我认为我至少会尝试更精确地回答(如果不太优雅)。是的,您可以使用中的返回码scp
,而且我经常这样做。在bash
:
scp foo user@server:/destination && rm foo
我想就多个文件正确地复制和处理堆栈中的故障,因此对于多个文件:
for file in bar*; do scp "$file" user@server:/destination && rm "$file" ; done
仅当您使用时ssh-agent
,这最后一个才是实际的,但我非常希望您能这样做。
-l
标志处理带宽限制。例如,-l 8192
将传输限制为8192 kb / s
在我的情况下,ssh端口不是22,所以
rsync -avz --remove-source-files -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/
为我工作。
如果您像我一样拥有较旧的目标服务器,则无法使用
--remove-source-files
但是你必须使用
--remove-sent-files --protocol=29
代替。
-e ssh
是多年以来的隐式默认值,通常不再需要使用此参数。