CentOS上的Crontab,通过scp上传文件并成功删除

时间:2012-01-21 11:59:35

标签: bash ssh cron centos

我正在运行CentOS 6。

我需要每小时将一些文件上传到另一台服务器。

我有SSH访问密码到服务器。但是ssh-keys等不是一种选择。

任何人都可以帮助我使用.sh脚本通过scp上传文件并在成功上传后删除原文吗?

1 个答案:

答案 0 :(得分:1)

为此,我建议使用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               Archive mode
 -z, --compress              Compress file data during the transfer
 -r, --recursive             recurse into directories
 -p, --perms                 Preserve permissions
     --progress              Show progress during transfer
     --password-file=FILE    Get password from FILE
     --delete-after          Receiver deletes after transfer, not during

修改:删除 - 删除 - 之后,因为那不是OP的意图

设置包含密码的文件的权限时要小心。理想情况下,只有你应该访问他的文件。

像往常一样,我建议稍微使用rsync来熟悉它。在删除本地文件之前,最好检查rsync的返回值(使用$?)。

有关rsync的更多信息:http://linux.about.com/library/cmd/blcmdl1_rsync.htm