| #!/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 |