blob: afa4702c18cfa371595dc26c6ee48cb7a48a2114 [file] [log] [blame]
#!/bin/sh
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#########################################################
# DEFAULT CONFIGURATION
#########################################################
SOURCE_DIRECTORY=$HOME/tmp
DESTINATION_DIRECTORY=$HOME/backup
BATCH_FILE_DIR=`pwd`
PUT_BATCH_FILE=$BATCH_FILE_DIR/sftp-put-batch.txt
MKDIR_BATCH_FILE=$BATCH_FILE_DIR/sftp-mkdir-batch.txt
USERNAME=$USER
HOSTNAME=127.0.0.1
#########################################################
# FUNCTIONS
#########################################################
toString(){
echo ""
echo "INFO: .toString(): SourceDirectory: $SOURCE_DIRECTORY"
echo "INFO: .toString(): DestinationDirectory: $DESTINATION_DIRECTORY"
echo "INFO: .toString(): BatchFileDirectory: $BATCH_FILE_DIR"
echo "INFO: .toString(): BatchFileMkdir: $MKDIR_BATCH_FILE"
echo "INFO: .toString(): BatchFilePut: $PUT_BATCH_FILE"
echo "INFO: .toString(): RemoteUsername: $USERNAME"
echo "INFO: .toString(): RemoteHostname: $HOSTNAME"
echo ""
echo ""
echo ""
echo ""
}
browseDirectory(){
CURRENT_DIRECTORY=$1
SOURCE_DIR=$2
DEST_DIR=$3
##echo "DEBUG: Browsing Directory: $CURRENT_DIRECTORY"
FILES_AND_DIRS=`ls $CURRENT_DIRECTORY`
NUMBER_OF_FILES_AND_DIRS=`ls $CURRENT_DIRECTORY | wc -l`
##echo "DEBUG: Number of files and dirs: $NUMBER_OF_FILES_AND_DIRS"
if [ $NUMBER_OF_FILES_AND_DIRS = 0 ];then
##echo "DEBUG: No Files or Dirs within directory"
return
fi
for FILE_OR_DIR in $FILES_AND_DIRS; do
##echo "DEBUG: File or Dir: $FILE_OR_DIR"
if [ -d $CURRENT_DIRECTORY/$FILE_OR_DIR ]; then
echo "INFO: .browseDirectory(): Directory: $CURRENT_DIRECTORY/$FILE_OR_DIR"
createDirectory $SOURCE_DIR $DEST_DIR $CURRENT_DIRECTORY/$FILE_OR_DIR
browseDirectory $CURRENT_DIRECTORY/$FILE_OR_DIR $SOURCE_DIR $DEST_DIR
CURRENT_DIRECTORY=`dirname $CURRENT_DIRECTORY`
else
if [ -f $CURRENT_DIRECTORY/$FILE_OR_DIR ]; then
echo "INFO: .browseDirectory(): File: $CURRENT_DIRECTORY/$FILE_OR_DIR"
copyFile $SOURCE_DIR $DEST_DIR $CURRENT_DIRECTORY/$FILE_OR_DIR
else
echo "Exception: Neither File nor Directory: $CURRENT_DIRECTORY/$FILE_OR_DIR"
fi
fi
done
}
createDirectory(){
SOURCE_DIR=$1
DEST_DIR=$2
LDIRECTORY=$3
echo "INFO: .createDirectory(): $LDIRECTORY"
#echo "INFO: .createDirectory(): $SOURCE_DIR"
#echo "INFO: .createDirectory(): $DEST_DIR"
LPARENT=`dirname $LDIRECTORY`
NAME=`basename $LDIRECTORY`
RELATIVE_DIR=`echo $LDIRECTORY | sed -e "s%$SOURCE_DIR%%g"`
echo "DEBUG: .copyFile(): Relative Directory: $RELATIVE_DIR"
DPARENT=`dirname $DEST_DIR$RELATIVE_DIR`
#echo "INFO: .createDirectory(): lcd $LPARENT"
#echo "INFO: .createDirectory(): cd $DPARENT"
#echo "INFO: .createDirectory(): mkdir $NAME"
echo ""
echo "pwd" > $MKDIR_BATCH_FILE
echo "lcd $LPARENT" >> $MKDIR_BATCH_FILE
echo "cd $DPARENT" >> $MKDIR_BATCH_FILE
echo "mkdir $NAME" >> $MKDIR_BATCH_FILE
echo "quit" >> $MKDIR_BATCH_FILE
sftp -b $MKDIR_BATCH_FILE $USERNAME@$HOSTNAME
##rm $MKDIR_BATCH_FILE
}
copyFile(){
SOURCE_DIR=$1
DEST_DIR=$2
LFILE=$3
echo "INFO: .copyFile(): $LFILE"
#echo "INFO: .copyFile(): $SOURCE_DIR"
#echo "INFO: .copyFile(): $DEST_DIR"
RELATIVE_FILE=`echo $LFILE | sed -e "s%$SOURCE_DIR%%g"`
echo "DEBUG: .copyFile(): Relative File: $RELATIVE_FILE"
DFILE=$DEST_DIR$RELATIVE_FILE
LPARENT=`dirname $LFILE`
DPARENT=`dirname $DFILE`
NAME=`basename $LFILE`
#echo "INFO: .copyFile(): lcd $LPARENT"
#echo "INFO: .copyFile(): cd $DPARENT"
#echo "INFO: .copyFile(): put $NAME"
echo ""
echo "lcd $LPARENT" >> $PUT_BATCH_FILE
echo "cd $DPARENT" >> $PUT_BATCH_FILE
echo "put $NAME" >> $PUT_BATCH_FILE
}
#########################################################
# MAIN
#########################################################
toString
SOURCE_DIRECTORY=$1
DESTINATION_DIRECTORY=$2
BATCH_FILE_DIR=$3
USERNAME=$4
HOSTNAME=$5
if ! ([ $SOURCE_DIRECTORY ] && [ $DESTINATION_DIRECTORY ] && [ $BATCH_FILE_DIR ] && [ $USERNAME ] && [ $HOSTNAME ]);then
echo "Usage: copy-recursive.sh \"SourceDirectory DestinationDirectory BatchFileDirectory RemoteUsername RemoteHostname\""
exit 0
fi
PUT_BATCH_FILE=$BATCH_FILE_DIR/sftp-batch-put.txt
MKDIR_BATCH_FILE=$BATCH_FILE_DIR/sftp-mkdir-batch.txt
PUT_BATCH_FILE=$BATCH_FILE_DIR/sftp-put-batch.txt
toString
#exit 0
echo "pwd" > $PUT_BATCH_FILE
CURRENT_DIRECTORY=$SOURCE_DIRECTORY
browseDirectory $CURRENT_DIRECTORY $SOURCE_DIRECTORY $DESTINATION_DIRECTORY
echo "quit" >> $PUT_BATCH_FILE
sftp -b $PUT_BATCH_FILE $USERNAME@$HOSTNAME
##rm $PUT_BATCH_FILE