Put*_*nik 56 networking linux scp
如何不复制而是将文件从一台服务器移动到另一台服务器(都是 Linux)?
man scp
没有给我任何有用的东西。我不能先使用 'scp' 再使用 'rm',因为我必须确保文件已成功传输。如果传输过程中出现任何错误,则不得删除该文件。
也许我应该以某种方式使用退出代码,但是如何使用?此外,有很多文件,如果最后一个文件失败,保留所有成功传输的文件将不是一个好选择。
也许除了SCP之外还有什么?
Tom*_*Tom 57
rsync over ssh 可能是你最好的--remove-source-files
选择
rsync -avz --remove-source-files -e ssh /this/dir remoteuser@remotehost:/remote/dir
Run Code Online (Sandbox Code Playgroud)
快速测试给出;
[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
Run Code Online (Sandbox Code Playgroud)
正如@SvenW 提到的,-e ssh
是默认值,因此可以省略。
Sve*_*ven 23
使用rsync
代替scp
:
rsync -avz --remove-source-files /sourcedir user@host:/targetdir
Run Code Online (Sandbox Code Playgroud)
更多信息与man rsync
。
Mad*_*ter 20
这个问题得到了很好的回答,答案也被接受了,但由于它漂浮在首页的顶部,我想我至少会尝试更准确地回答它,如果不那么优雅的话。是的,您可以使用来自 的返回码scp
,我经常这样做。在bash
:
scp foo user@server:/destination && rm foo
Run Code Online (Sandbox Code Playgroud)
我接受您关于多个文件的观点,以正确复制和处理堆栈中的故障,因此对于多个文件:
for file in bar*; do scp "$file" user@server:/destination && rm "$file" ; done
Run Code Online (Sandbox Code Playgroud)
最后一个只有在您使用 时才实用ssh-agent
,但我非常希望您是。
小智 5
如果分两步完成没有问题,您可以使用scp
从远程服务器复制文件,然后执行ssh -e "rm /path/to/file"
从磁盘删除。当移动文件时,尤其是在机器之间移动时,可能会出现问题,因此最好分别执行复制和删除,并且仅在确定文件已成功复制时才删除该文件。
归档时间: |
|
查看次数: |
87002 次 |
最近记录: |