如何读取文件夹并将新创建的文件移动到两个不同的网络位置

时间:2014-07-04 09:01:50

标签: bash incron

我的服务器上有一个文件夹,它从另一台服务器上运行的ftp进程中获取文件。

我需要的是,每当目录中出现新文件时,将这些文件可互换地移动到另外两个网络位置。 (以负载平衡方式 - 第一个文件到Location1,下一个文件到位置2,同样在位置1旁边)

我使用incrontab运行bash脚本来执行此操作。

最合适的方法是什么?

这是我要做的方式。这是实现这一目标的最佳方法吗?

incrontab:

/myserver/monitored_folder IN_CREATE /root/scripts/move_files.sh $#

movefiles.sh bash script(伪):

start
read var from file1
if var is odd
move $# to NetworkLocation1
else
move $# to NetworkLocation2
end if
increment var
write var to file1
end

2 个答案:

答案 0 :(得分:0)

你有一个相当简单的方法,这似乎工作正常。我建议的唯一其他方法是使用简单的切换(变量0/1):

let toggle=0

if test "$toggle" -eq 0; then
    move to NetworkLocation1
    ((toggle+=1))
else
    move to NetworkLocation2
    ((toggle-=1))
fi

这样可以确保基于每个文件的NetworkLocation1 / NetworkLocation2余额,而不是文件中的奇数/偶数var。试一下。

答案 1 :(得分:0)

我已经实现了它。它工作正常。

incrontab:

/data/source_folder/ IN_CREATE /path_to_script/file_delivery.sh $#

Bash脚本:

#!/bin/bash
#log file location
logfile=/var/log/file_delivery.log
exec > $logfile 2>&1

read var < var.dat
rem=$(( $var % 2 ))

#action here
sleep 30
if [ $rem -eq 0 ]; then
  scp /data/source_folder/$1 root@SERVER1:/path_on_server1/dest_folder
  rm -f /data/source_folder/$1
  echo "$(date +"%y-%m-%d-%H:%M:%S") - file $1 has been moved to server1"
else
  scp /data/source_folder/$1 root@SERVER2:/path_on_server2/dest_folder
  rm -f /data/source_folder/$1
  echo "$(date +"%y-%m-%d-%H:%M:%S") - file $1 has been moved to server2"
fi

var=$((var+1))
echo $var > var.dat