通过 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 文件?
我正在读取写入各种文件的本地文件夹,如果文件匹配某种模式,我会通过第二个脚本将这些文件发送到远程服务器(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 文件?