通过 scp 传输时隐藏文件

Hide files while being transfered via 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

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

读取参数$LOG_FILE后(当LOG_FILE有a时改解 路径,类似于 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 文件?