【发布时间】:2012-02-15 16:34:43
【问题描述】:
我正在运行 CentOS 6。
我需要每小时上传一些文件到另一台服务器。
我可以通过 SSH 访问服务器并使用密码。但是 ssh-keys 等不是一个选项。
谁能帮我写一个 .sh 脚本,通过 scp 上传文件并在成功上传后删除原始文件?
【问题讨论】:
我正在运行 CentOS 6。
我需要每小时上传一些文件到另一台服务器。
我可以通过 SSH 访问服务器并使用密码。但是 ssh-keys 等不是一个选项。
谁能帮我写一个 .sh 脚本,通过 scp 上传文件并在成功上传后删除原始文件?
【问题讨论】:
为此,我建议使用 rsync 而不是 scp,因为它的功能要强大得多。只需将以下内容放入可执行脚本中。在这里,我假设所有文件(仅此而已)都在 local_dir/ 指向的目录中。
#!/bin/env bash
rsync -azrp --progress --password-file=path_to_file_with_password \
local_dir/ remote_user@remote_host:/absolute_path_to_remote_dir/
if [ $? -ne 0 ] ; then
echo "Something went wrong: don't delete local files."
else
rm -r local_dir/
fi
选项如下(如需了解更多信息,请参阅http://ss64.com/bash/rsync.html):
-a, --archive 归档模式 -z, --compress 在传输过程中压缩文件数据 -r, --recursive 递归到目录 -p, --perms 保留权限 --progress 显示传输过程中的进度 --password-file=FILE 从文件中获取密码编辑:删除 --delete-after,因为这不是 OP 的意图
为包含密码的文件设置权限时要小心。理想情况下,只有您有权访问该文件。
像往常一样,我建议您玩一下 rsync 以熟悉它。最好在删除本地文件之前检查 rsync 的返回值(使用 $?)。
更多关于rsync的信息:http://linux.about.com/library/cmd/blcmdl1_rsync.htm
【讨论】: