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
{
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