我有一个文件夹,里面有大约 200 000 个文件,总大小约为 300 GB,我需要通过 SSH 连接将其传输到远程主机。我正在寻找一种方法,在验证本地文件已成功复制到远程主机后删除这些文件,但我不知道该怎么做。rsync --remove-source-files
根据其他帖子,如果连接中断,这似乎不安全 (这里)。如何才能安全地做到这一点?
答案1
有一个 shell 脚本:
请注意,它做出了一些假设,我已在下面记录下来。
#!/bin/sh
# first, upload the directory structure
# be REALLY sure that it made it intact!
while true
do
# try to upload it:
rsync $flags --filter="+ */" --filter="- *" $source $destination
# it uploaded fine? cool, break the loop (else try again):
[ "$?" -eq 0 ] && break
done
# now the files
for file in $(find $source -not -type d)
do
# again, be REALLY sure they copied okay!
while true
do
# try to upload it:
rsync $flags $file $destination/$file
# it uploaded fine? cool, break the innermost loop (else try again):
[ "$?" -eq 0 ] && break
done
# delete the local copy of the file:
rm $file
done
此脚本假设如下:
- 其中
$source
,、$destination
和$flags
要么被设置为环境变量,要么在脚本中用实际的源、目标和rsync
您想要使用的任何其他标志替换。(不要替换$?
或$file
。) - 那
$source
是一条相对路径。 - 如果
rsync
无论出于什么原因指定的$file
复制未 100% 成功。 - 您已经对不太重要的数据进行了测试,因为我还没有。
答案2
也许你可以使用SSHFS. sshfs 可让您通过 ssh “挂载”远程目录(实际上是执行其他 ssh 命令来模拟文件系统)。然后您可以使用它mv
来移动文件。
您不需要成为超级用户,因为它是一个用户空间文件系统。
答案3
例如,你可以将文件分成十个块,然后
rsync (source files) destination
如果运行成功,则继续
rsync --remove-source-files (source files) destination
第二个 rsync 命令增加的带宽可以忽略不计。