首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取文件夹并将新创建的文件移动到两个不同的网络位置

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

Stack Overflow用户
提问于 2014-07-04 09:01:49
回答 2查看 145关注 0票数 0

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

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

我使用incrontab来运行bash脚本来完成这个任务。

这样做最合适的方法是什么?

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

incrontab:

代码语言:javascript
复制
/myserver/monitored_folder IN_CREATE /root/scripts/move_files.sh $#

movefiles.sh bash脚本(伪):

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-07 08:23:27

我已经实现了。它很好用。

incrontab:

代码语言:javascript
复制
/data/source_folder/ IN_CREATE /path_to_script/file_delivery.sh $#

Bash脚本:

代码语言:javascript
复制
#!/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
票数 0
EN

Stack Overflow用户

发布于 2014-07-04 10:09:36

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

代码语言:javascript
复制
let toggle=0

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

这将确保基于每个文件的NetworkLocation1 / NetworkLocation2平衡,而不是文件中的奇数/偶数变量。好好想想。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24570497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档