: ########################################################################## # Shellscript: cpdir - copy directory structure # Version : 0.1 (beta) # Author : Heiner Steven (heiner.steven@odn.de) # Date : 31.05.95 # Category : File Utilities # SCCS-Id. : $Id: cpdir,v 1.1.1.1 1999/06/15 19:29:05 heiner Exp $ ########################################################################## # Description # ########################################################################## PN=`basename $0` # program name VER='0.1 (beta)' CpioOpt=-pdm FindOpt= Usage () { echo "$PN - copy directory hierarchies, $VER (stv '95) usage: $PN [-vud] dir [dir ...] target -v print names of files -u unconditionally overwrite existing files -d copy only directory structure, without contents" >&2 exit 1 } Msg () { for i do echo "$PN: $i" >&2 done } Fatal () { Msg "$@"; exit 1; } while [ $# -gt 0 ] do case "$1" in -v|-u) CpioOpt="$CpioOpt $1";; -d) FindOpt="-type d";; --) shift; break;; -h) Usage;; -*) Usage;; *) break;; # First file name esac shift done [ $# -ge 2 ] || Usage SrcDir= NoDir= while [ $# -gt 1 ] do if [ -d "$1" -a -r "$1" -a -x "$1" ] then SrcDir="$SrcDir $1" else NoDir="${NoDir:+$NoDir }$1" fi shift done [ -n "$NoDir" ] && Msg "no directory or insufficient rights to copy - ignored:" "$NoDir" [ -n "$SrcDir" ] || Fatal "please specify source directory" TargetDir="$1" [ -d "$TargetDir" ] || { Msg "creating new directory $TargetDir" mkdir -p "$TargetDir" || exit } # Resolve relative path names TargetDir=`cd "$TargetDir"; pwd` # Work-around for bug in the SOLARIS 2.5 ksh93 ("cd" prints new directory): TargetDir=`echo "$TargetDir" | head -1` [ -n "$TargetDir" ] || Fatal "cannot determine target directory" for Path in $SrcDir do ( cd $Path find . $FindOpt -print | cpio $CpioOpt "$TargetDir" ) done exit