【问题标题】:Cronjob on CentOS, upload files via scp and delete on successCentOS上的crontab,通过scp上传文件,成功后删除
【发布时间】:2012-02-15 16:34:43
【问题描述】:

我正在运行 CentOS 6。

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

我可以通过 SSH 访问服务器并使用密码。但是 ssh-keys 等不是一个选项。

谁能帮我写一个 .sh 脚本,通过 scp 上传文件并在成功上传后删除原始文件?

【问题讨论】:

    标签: bash ssh cron centos


    【解决方案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 归档模式 -z, --compress 在传输过程中压缩文件数据 -r, --recursive 递归到目录 -p, --perms 保留权限 --progress 显示传输过程中的进度 --password-file=FILE 从文件中获取密码 --delete-after 接收方在传输后删除,而不是在传输期间删除

    编辑:删除 --delete-after,因为这不是 OP 的意图

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

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

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

    【讨论】:

    • 我确实在目录中有一些文件,不应该上传也不应该删除。这可能吗?
    • 刚刚发现 rsync 删除了我的远程文件夹中的所有文件,这些文件在本地文件夹中不存在。不好。我认为 scp 会更好地解决这个问题吗?
    • @user809829:是的,这就是 --delete-after 的目的。您可以删除该选项,它不会删除文件。没有理由在 rsync 上使用 scp,因为后者更强大。您还可以使用 --dry-run 选项来试验 rsync 的作用,该选项将仅显示它将执行的操作。在任何情况下,您都应该阅读手册页,它们包含很多信息。
    • 哦,不知道。谢谢你。我将手册页读为 delete-after 只是在复制新文件后等待删除文件(也在远程服务器上),而不是在文件传输之前/期间。
    • 似乎密码文件不起作用?我一直在阅读它,它与 rsync 应该作为守护进程运行有关。我试过 --daemon 但仍然报告错误。
    猜你喜欢
    • 2020-04-02
    • 2019-03-08
    • 1970-01-01
    • 2013-01-17
    • 2013-11-16
    • 1970-01-01
    • 2014-01-30
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多