0

我正在为 Ubuntu 中的 Unix 创建一个同步两个目录的 bash 脚本。

我已经编写了同步程序,但我面临的问题是我需要通过命令行调用我的脚本:“ mySync -r leftdir rightdir ”或“ mySync -i leftdir rightdir ”,我似乎没有让它工作。

-r (递归)将覆盖所有重复的文件夹。

-i 只有在用户同意的情况下才会覆盖重复的文件夹

问题是如何通过命令使我的脚本可执行?

如果选择了“-i”命令,我怎样才能让我的脚本在覆盖之前等待用户的接受?

在此先感谢您的帮助 。

代码是:

    #!/bin/bash

    echo "hello,the directory must be on the Desktop. "
    read -p "Please enter your username: " x3

    read -p "First directory name: " x1
    read -p "Second directory name: " x2

    dir1="/home/$x3/Desktop/$x1/"
    dir2="/home/$x3/Desktop/$x2/"

    if [ -d $dir2 ]; then
    cd "$dir1"

    find . -print0 | while read -d $'\0' file; do
    [ -e "$dir2/$file" ] || echo "$file"
    done

    cp -rupv $dir2* $dir1

    else
    echo Path Not found.. Check network status
    fi


    if [ -d $dir1 ]; then
    cd "$dir2"
    find . -print0 | while read -d $'\0' file; do
    [ -e "$dir1/$file" ] || echo "$file"
    done

    cp -rupv $dir1* $dir2

    else
    echo Path Not found.. Check network status

    fi
4

2 回答 2

1

首先,你为什么不只使用rsync

如果您真的想自己执行此操作,我建议您使用getoptorgetopts进行选项解析。然后您可以根据这些选项控制执行...

要使脚本可执行,您可以使用 chmod:

$ chmod +x mySync

于 2013-03-10T19:01:41.963 回答
0

能稍微描述一下吗??

如果您想让您的脚本可以通过命令执行,请像这样创建一个 C 包装器

在 /usr/ 目录中创建一个文件夹(假设为 XXX)并将 sh 文件复制到那里

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv){
  char string[512];
  strcpy(string, "");
  if(argc>=2){      //if argument exists
    for(int i=1; i<argc; i++){
        strcpy(string, strcat(strcat(string, argv[i]), " ") );
    }

            char cmd[512];
            system("cd /usr/XXX")
            strcpy(cmd, strcat("PROGRAM_NAME.sh ", string)); //note the SPACE
            system(cmd);
  }

  else{
    system("cd /usr/XXX")
    system("PRGRAM_NAME.sh");
  }
}

它的编码非常粗略(使用 -std=c99 编译),然后将 sh 文件和编译文件都放在 /usr/XXX 目录中,现在打开 .bashrc 文件,最后放入

export PATH="/usr/XXX:$PATH"

现在输入命令..

如果命令不起作用,请修改它...如果其他人完全回答它,快乐就消失了(基本上,我现在没有足够的勇气检查文件) 编辑
您需要通过键入来获取 .bashrc 文件源.bashrc

于 2013-03-10T19:00:28.907 回答