【问题标题】:Hide files while being transfered via scp通过 scp 传输时隐藏文件
【发布时间】:2015-07-30 19:39:27
【问题描述】:

我正在读取写入各种文件的本地文件夹,如果文件匹配模式,我将通过第二个脚本 (transfer_file.sh) 将这些文件发送到远程服务器,如果传输是成功完成(通过 SCP)然后我使用 rsync 将处理后的文件移动到本地文件夹作为本地备份,使用 --remove-source-files 标志从监控文件夹。可能是有大量文件正在传输,因此 rsync 尚未完成,在第一个循环完成睡眠后,它可能会重试发送已在前一个循环中读取的文件。如何取消列出或不处理已传递给 transfer_file.sh 的文件?我增加了睡眠时间,但需要一个更干净的解决方案,以防我突然处理了数百个文件。

if [ -d $MONITOR_FOLDER ] ; then
        while [ 1 ]; do
            echo "$(date +%c) monitor() |Main| Monitoring local repository"
            for LOG_FILE in `ls $MONITOR_FOLDER$LOG_PATTERN 2> /dev/null`
                do              
                    sh transfer_file.sh $LOG_FILE &
                done
            sleep 10
        done
    fi

【问题讨论】:

    标签: shell locking rsync scp


    【解决方案1】:

    编辑 transfer.sh 以便跟踪正在处理的文件。 为每个正在处理的文件使用 tmp 文件夹和 tmp 文件:

    读取参数 $LOG_FILE 后(LOG_FILE 有 路径,类似于tr "/" "_",并且当 LOG_FILE 名称中有空格时):

    tmpdir=/tmp/transfer_in_process
    tmpfile=${tmpdir}/${LOG_FILE}.tmp
    if [ -f "${tmpfile}" ]; then
       echo "File already being transferred"
       exit 0
    fi
    
    touch "${tmpfile}"
    ... (transfer code)
    rm -f "${tmpfile}"
    

    在此之后,您应该进行一些错误处理:何时删除已开始但从未完成的传输的 tmp 文件?

    【讨论】:

      猜你喜欢
      • 2016-09-07
      • 2016-11-22
      • 2013-02-12
      • 2013-01-17
      • 2017-12-04
      • 2012-04-05
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      相关资源
      最近更新 更多