美文网首页
linux shell 附有明细的文件复制

linux shell 附有明细的文件复制

作者: 风吟空城 | 来源:发表于2019-07-18 11:42 被阅读0次

    业务需求

    在linux执行文件夹或文件复制时,有时需要知道哪些文件更新了,哪些文件没有更新,哪些文件是新建的。基于此需求决定编写一个shell脚本来达到此目的。

    shell 代码

    1.扫描文件夹

    function scan_src_dir_folder  {
      ls "$SRC_DIR" | while read file
      do
        if [ -d "$SRC_DIR/$file" ];
          then
            if [ ! -d "$DST_DIR/$file" ] ;
              then
                out_i "Mkdir $DST_DIR/$file"
                mkdir -p $DST_DIR/$file
            fi
        fi
    
        if [ -f "$SRC_DIR/$file" ];
          then
            copy_on_modify "$SRC/$file" "$DST_DIR/$file"
        fi
      done
    }
    

    2.递归扫描文件

    function scan_src_dir_file {
      ls "$1" | while read file
      do
        if [ -d "$1/$file" ];
          then
            if [ ! -d "$2/$file" ];
              then
                out_i "mkdir $2/$file"
                mkdir - p $2/$file
            fi
            scan_src_dir_file "$1/$file" "$2/$file"
        fi
        
        if [ -d "$1/$file" ]
          then
            copy_on_modify "$1/$file" "$2/$file"
        fi
      done
    }
    

    3.复制文件

    function copy_on_modify {
      if [ -f $2 ]
        then
          cmp "$1" "$2" > /dev/null 2>&1
          if [ $? = 0 ]
            then
              touch "$2"
          else
            echo "CP-F -> $1"
            cp -f "$1" "$2"
          fi
      else
        echo "CP-N -> $1"
        cp -f "$1" "$2"
      FI
    }
    

    4.日志输出

    COLOR_INFO="echo -en \\033[1;32m"
    COLOR_RESET="echo -en \\033[0m"
    
    function out_i {
      $COLOR_INFO
      echo $*
      $COLOR_RESET
    }
    

    shell 指令附录

    1. -d filename 如果filename为目录,则为真;
    2. -f filename 如果filename为常规文件,则为真;
    3. cmp 命令是用于比较2个文件是否有差异;
    4. touch 命令是用于更改文件的时间属性;
    5. /dev/null 2>&1 cmp的比较结果命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中;

    相关文章

      网友评论

          本文标题:linux shell 附有明细的文件复制

          本文链接:https://www.haomeiwen.com/subject/lfyklctx.html