un script compare

Aller page précédenteAller à la racineAller page suivante

 

#!/bin/sh
Tmp=/tmp/$$.$(basename $0)
Stage="$(cd $1; pwd)"
Image="$(cd $2; pwd)"
Root="$3"
Site="$4"
User="$5"
Password="$6"
D1=$(echo $(dirname $Stage) | sed 's/\//\\\//g')
D2=$(echo $(dirname $Image) | sed 's/\//\\\//g')
F1=$(basename $Stage)
F2=$(basename $Image)
#
Remove_File() {
 #echo "# rm $Image/$1"
  echo "cd $Root/$(dirname $1)"
  echo "del $(basename $1)"
}
Remove_Dir() {
  #echo "# rmdir $Image/$1"
  echo "cd $Root/$(dirname $1)"
  echo "rmdir $(basename $1)"
}
Create_Dir() {
  #echo "# mkdir $Image/$1"
  echo "cd $Root/$(dirname $1)"
  echo "mkdir $(basename $1)"
}
Copy_File() {
  #echo "# cp $Stage/$1 $Image/$1"
  echo "lcd $(dirname $Stage/$1)"
  echo "cd $Root/$(dirname $1)"
  echo "put $(basename $1)"
}
#
Recursively_Remove_Dir() {
  # echo "=== in Recursively_Remove_Dir $1 ==="
  cd $Image/$1
  for f in $(ls); do
   if [ -d $f ]; then
      Recursively_Remove_Dir $1/$f
      cd $Image/$1
    else
      Remove_File $1/$f
      cd $Image/$1
    fi
  done
  Remove_Dir $1
}
Recursively_Copy_Dir() {
  # echo "=== in Recursively_Copy_Dir $1 ==="
  Create_Dir $1
  cd $Stage/$1
  for f in $(ls); do
    if [ -d $f ]; then
      Create_Dir $1/$f
      cd $Stage/$1
      Recursively_Copy_Dir $1/$f
      cd $Stage/$1
    else
      Copy_File $1/$f
      cd $Stage/$1
    fi
  done
}
#
Change () {
  # Called when a simple file (not a directory) is different
  Copy_File $1
}
Copy () {
  # Called when a file (simple file or directory) exists in Stage
  # and not in Image (thus has to be created there by copying it)
  if [ -d $Stage/$1 ]; then
    Recursively_Copy_Dir $1
  else
    Copy_File $1
  fi
}
Remove () {
  # Called when a file (simple file or directory) doesn't exist in Stage
  # but exists in Image (thus has to be removed from Image)
  if [ -d $Image/$1 ]; then
    Recursively_Remove_Dir $1
  else
    Remove_File $1
  fi
}
#
diff -rq "$Stage" "$Image" | \
  grep -v '.DS_Store' | \
  sed -e "s/ $D1\// /" -e "s/ $D2\// /" \
      -e "s/^Files $F1\/\([^ ]*\) and $F2\/\([^ ]*\) differ$/Change \1/" \
      -e "s/^Only in $F1\/\([^ ]*\): \(.*\)$/Copy \1\/\2/" \
      -e "s/^Only in $F2\/\([^ ]*\): \(.\)$/Remove \1\/\2/" \
      -e "s/^Only in $F1: \(.*\)$/Copy \1/" \
      -e "s/^Only in $F2: \(.*\)$/Remove \1/" \
  > $Tmp
#echo '====================================='
#cat $Tmp
#echo '====================================='
echo "open $Site"
echo "user $User $Password"
echo "bin"
. $Tmp
rm $Tmp
echo "bye"
#

Cette page modifiée le 2002-11-20 à 22:09 est pointée par la page :