#!/bin/sh # A script to copy recursively ignoring detritus. # I based this off of a script I had that copied over ssh. # source can be a file or directory. # Mike Sliczniak 2009 # Don't copy resource forks or extended attributes on Mac OS X 10.4. COPY_EXTENDED_ATTRIBUTES_DISABLE=true; export COPY_EXTENDED_ATTRIBUTES_DISABLE # Don't copy resource forks or extended attributes on Mac OS X 10.5. COPYFILE_DISABLE=true; export COPYFILE_DISABLE case $# in 2) ;; *) echo "Usage: cpr source destdir" >&2 exit 2 ;; esac # dir and base names of the source d=`dirname "$1"` || exit b=`basename "$1"` || exit # handle relative and absolute destination dirs case "$2" in /*) p=$2 ;; *) p="$PWD"/"$2" ;; esac # cd into the source dir cd "$d" || exit # This is only for Mac OS X, but some systems do not have gtar, find # sometimes lacks -f, and other systems use test -a. # List all interesting files for tar to copy: # The first clause skips directories used for revision control. # The second clause ignores detritus files from revision control and OSs. # The third clause ignores ._ style files created by Mac OS X on file systems # that do not have native resource forks or extended attributes. It checks to # see that the file it is associated with exists. find -f "$b" \( \! \( -type d \( \ -name CVS -o -name RCS -o -name SCCS -o -name .git -o -name .svn \ \) -prune \) \) \ \ \( \! \( -type f \( \ -name .DS_Store -o -name Thumbs.db -o -name .cvsignore -o -name .gitignore \ \) \) \) \ \ \( \! \( \ -type f -name '._*' -execdir /bin/sh -c \ 'f=`echo "$1" | sed "s:^\._:./:"`; [ -e "$f" ]' /bin/sh '{}' \; \ \) \) -print0 | tar -c -f - --null -T - --no-recursion | tar -x -C "$p" -f -