#!/bin/bash # Just a normal copy program, BUT it never overwrites a file in the destination. # if the filename is already taken, the new file will get an incrementing number as postfix added just in fron of the dot before the extension. # no extension, its added the end. # example: filename.wav already exists, new file will get the name filename_1.wav. # # usage cp_keep.sh [src file] [dest folder] [prefix newfile] export IFS=$'\n' src=$1 dst=$2 prefix=$3 if [ -z $1 ]; then { echo "must specify source file" exit }; fi if [ -z $2 ]; then { echo "must specify destination directory" exit }; fi if [ ! -d $2 ]; then { echo "destination must be a directory" exit }; fi if [ -d $1 ]; then { echo "$1 is directory. .. quitting." exit }; fi src_dir=$(dirname $src) src_file=$(basename $src) if [ "$dst" -ef "$src_dir" ]; then { echo "source and destiation are same directory... quitting" exit }; fi export fname_new=$prefix$src_file count=1 while [ -e $dst/$fname_new ]; do { #destination filename already taken? #add suffix before any dot, if no dot just append if [[ "$fname_new" =~ \. ]]; then { fname_new=$(echo $fname_new | sed -e "s/\./_$count\./g") }; else { fname_new=$fname_new"_$count" }; fi # echo "filename already taken, suffix added: $dst/$fname_new" count=$(($count + 1)) }; done if [ "$count" -gt 1 ]; then { echo "$dst/$src_file already existed, new name: $fname_new" }; fi export cmd="cp -p \"$src_dir/$src_file\" \"$dst/$fname_new\"" #echo $cmd; eval $cmd