通过scp传输时隐藏文件

时间:2015-05-19 05:57:19

标签: shell locking rsync scp

我正在读取写入各种文件的本地文件夹,如果文件与模式匹配,我会通过第二个脚本( 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

1 个答案:

答案 0 :(得分: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文件?