#!/bin/bash file="" directory="" function usage { retval="$1" case "$retval" in 0) ;; *) exec 1>&2 ;; esac echo "Usage: $0 --file filename --directory --directoryname" echo echo This program copies a file to directory, but only if the echo file is not already in the directory with identical content. echo This cuts down on unnecessary sudoing. exit "$retval" } while [ "$#" -ge 2 ] do case "$1" in --file) file="$2" shift ;; --directory) directory="$2" shift ;; -h|--help) usage 0 ;; *) echo "$0: Unrecognized option: $1" 1>&2 usage 1 ;; esac shift done case "$file" in "") echo --file is a required option 1>&2 usage 1 ;; esac case "$directory" in "") echo --directory is a required option 1>&2 usage 1 ;; esac if ! [ -d "$directory" ] then # directory does not yet exist. # Try to create it "as me" if ! mkdir -p "$directory" > /dev/null 2>&1 then # if that fails, try to create it as root sudo mkdir -p "$directory" fi fi if ! cmp "$file" "$directory/$file" > /dev/null 2>&1 then base_filename=$(basename "$file") # file does not yet exist, or exists with different content # Try to copy it "as me" if ! cp "$file" "$directory/$base_filename" > /dev/null 2>&1 then # if that fails, try copy it as root sudo cp "$file" "$directory/$base_filename" fi fi