#!/bin/bash
#####################################################################
##                                                                 ##
##    archive copy v0.1                                            ##
##    this script can be used to sort recovered archives           ##
##                                                                 ##
#####################################################################

#####################################################################
##                                                                 ##
## General:                                                        ##
##  This Script is free; You can do whatever you want with it,     ##
##  except the following:                                          ##
##    - You're not allowed to publish it under any license.        ##
##    - You're not allowed to remove these lines.                  ##
##    - You're not allowed to remove or modify the author line.    ##
## Disclaimer of Warranty and Liability:                           ##
##  THIS SCRIPT IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY  ##
##  OF ANY KIND, EITHER EXPRES$SED OR IMPLIED, INCLUDING, WITHOUT  ##
##  LIMITATION, WARRANTIES THAT THE SCRIPT IS FREE OF DEFECTS,     ##
##  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.  ##
##  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE       ##
##  SCRIPT IS WITH YOU.                                            ##
##  SHOULD THIS SCRIPT PROVE DEFECTIVE IN ANY RESPECT, YOU         ##
##  (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME    ##
##  THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION.     ##
##                                                                 ##
##    Author: Jean Michel Bruenn <jean.bruenn@jeanbruenn.info>     ##
##    Date:  31th December 2008                                    ##
##                                                                 ##
#####################################################################

###
# ToDo
###
#    - we could need a check whether the archive is broken or not

###
# Changelog
###
# 0.1
#    - Initial release
###

###
# Variables
###
CDIRECTORY="/export"
WDIRECTORY="/home/wdp/archives"

mkdir -p $WDIRECTORY

echo "+ getting file list (rar, zip, tar, gz, bz2)" >&2
FILES=$(find "$CDIRECTORY" -type f -iregex '.*\.\(rar\|zip\|tar\|gz\|bz2\)');

IFS=$'\n';
for FILENAME in $FILES; do

	NEWNAME=$(echo $FILENAME | sed -r 's|.*/||g');
	# extension (.zip, .tar, etc without dot)
	# FIXME: not safe if filename contains more than one dot
	EXTENSION=$(echo $NEWNAME | sed -r 's|.*\.||');

	NEWNAME=$(echo $NEWNAME | sed -r 's|\..*||');

	mkdir -p "$WDIRECTORY/$EXTENSION"

	# now let's make sure that the file is not existing
	if [ -f "$WDIRECTORY/$EXTENSION/$NEWNAME.$EXTENSION" ] ; then

		# file exists let's add a number to the filename
		# and check whether that file exists too (we set
		# this number higher until we found a not existing
		# filename.
		echo "+ Copy detected. Renaming...";

		for (( I=1; $I \<= 9999; I++ )) ; do

			if [ ! -f "$WDIRECTORY/$EXTENSION/$NEWNAME.$I.$EXTENSION" ] ; then

				# wow, we got a free filename. Let's break the
				# for and give back the new filename
				NEWFILENAME="$NEWNAME.$I.$EXTENSION";
				# to make sure its not overwritten by another running parallel process
				break;

			fi

		done

		echo "+ Renamed to: $NEWNAME.$I.$EXTENSION";

	else

		# the filename is free already.
		NEWFILENAME="$NEWNAME.$EXTENSION";

	fi

	echo "+ Copying $FILENAME to $WDIRECTORY/$EXTENSION/$NEWFILENAME"
	cp "$FILENAME" "$WDIRECTORY/$EXTENSION/$NEWFILENAME"

done

