【Bash脚本】BASH script to find files exist in two folders

function file_in_both
{
    local DIRA=$1
    local DIRB=$2
    local DIRC=$3
    local FILE_LIST=$(find $DIRA/ -type f)
    local F
    for F in $FILE_LIST ; do
        F=`echo $F | sed -e 's/\('$DIRA'\/\)*//g'`
        if [ -f "$DIRB/$F" ]; then
            if [ -d $DIRC ]; then
                mkdir_cp $DIRA $DIRC $F
            else
                echo $F
            fi
        fi
    done
}

function file_in_only
{       
    local DIRA=$1
    local DIRB=$2
    local DIRC=$3
    local FILE_LIST=$(find $DIRA/ -type f)
    local F
    for F in $FILE_LIST ; do
        F=`echo $F | sed -e 's/\('$DIRA'\/\)*//g'`
        if [ ! -f "$DIRB/$F" ]; then
            if [ -d $DIRC ]; then
                mkdir_cp $DIRA $DIRC $F
            else
                echo $F
            fi
        fi        
    fi
    done
}

function mkdir_cp
{
    local DIRA=$1
    local DIRC=$2
    local F=$3
    local DSTDIR=$DIRC/$(dirname $F)
    mkdir -p $DSTDIR
    echo "Copying $DIRA/$F to $DSTDIR/ ..."
    cp $DIRA/$F $DSTDIR/
}


case $1 in
both)
    file_in_both $2 $3 $4
    ;;
only)
        file_in_only $2 $3 $4
    ;;
*)
    echo Usage:
    echo List files in both dir1 and dir2. Copy the found files to dir3 if necessary.
    echo "    $0 both dir1 dir2 [dir3]"
    echo List files only in dir1 and not in dir2. Copy the found files to dir3 if necessary.
    echo "    $0 only dir1 dir2 [dir3]"
    ;;
esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值