Bash脚本将源目录复制到两个目标目录,如果成功则验证并删除源

时间:2013-03-02 20:36:46

标签: macos bash rsync nfs

操作系统:OSX山狮

我正在尝试编写一个执行以下操作的脚本

  • 检查目标1(bitcasa)上是否存在file1 如果存在则将源文件夹复制到目标1 如果文件不存在找到bitcasa进程并杀死它然后等待60秒然后启动bicasa。    再试一次(循环?)#bitcasa有时会停止工作并且必须重新启动。
  • 检查目标2(nfs共享)上是否存在file2 如果存在则将源文件夹复制到目标1 如果文件不存在,请尝试挂载nfs共享。   再试一次(循环?)
  • 验证复制的文件 如果文件复制成功删除源文件

  • 我只希望脚本尝试几次,如果它违反了nas主机它应该放弃并在下次运行脚本时尝试。我想每2小时运行一次脚本。在山狮中已经移除了crontab接缝。

当我把它写下来时,我意识到它比我最初想的要复杂一点。

首先关于安装nfs共享,如果你弹出已安装的nfs共享,则在OsX中删除/ Volumes中的文件夹。如果nas可用,那么确保nfs共享的最佳方法是什么?这可能是在脚本之外处理的? 如果我手动挂载nfs共享,我将需要创建/ Volumes / media,这将导致如果我使用gui挂载共享将使用/ Volumes / media-1 / sins / Volumes / media vill已经存在。

关于通过名字查杀过程我无法知道PID,我尝试使用linux命令我发现:     杀死ps -ef | grep bitcasa | grep -v grep | awk ‘{print $2}’这不起作用。

我不知道如何检查是否所有文件都被成功复制,也许rsync可以解决这个问题?

我已经开始使用(未经测试)

    #check if bitcasa is running (if file exist)
    if [ -f /Volumes/Bitcasa\ Infinite\ Drive/file.ext ]
    then
    rsync -avz /Users/username/source /Volumes/Bitcasa\ Infinite\ Drive/destination/
       else
       #Bitcasa might have stopped, check if process i running, kill if it is, then start bitcasa
    fi
    #Check if nfs share is mounted (if file exist)
    if [ -f /Volumes/media/file.ext ]
    then
    rsync -avz /Users/username/source /Volumes/media/
    fi
        else
        #nfs share (192.168.1.106:/media/) need to be mounted to /Volumes/media 

我自己会做更多的工作,但我知道我需要帮助。

或者我这样做是为了复杂吗?也许备份程序可以做到这一点?

1 个答案:

答案 0 :(得分:1)

对于kill ... ps问题,您可以使用killall来杀死具有给定名称的所有进程

killall bitcasa

或查看man ps并使用用户定义的格式,这样可以简化选择

ps -o pid,comm | awk '/bitcasa/ { print $1; }' | xargs kill

对于nas,如果您可以登录并安装rsync和ssh(或已安装它),则无需安装任何内容。您可以将192.168.1.106:/media/作为rsync的目标,rsync将执行所有必要的操作。

在任何情况下,首先检查并在必要时安装,然后在所有设置正确而不是相反的情况下启动rsync

if [ ! -f "/Volumes/Bitcasa Infinite Drive/file.ext" ]; then
    # kill bitcasa, restart bitcasa
fi

rsync -avz /Users/username/source "/Volumes/Bitcasa Infinite Drive/destination/"

同样适用于

if [ ! -f "/Volumes/media/file.ext" ]; then
    # mount nas nfs share
fi

rsync -avz /Users/username/source "/Volumes/media/"

或者你的nas上有rsync和ssh,只需

rsync -avz /Users/username/source 192.168.1.106:/media/