I had a need to copy certain files from one directory to another. Not all the files, just some that I could identify by file extension. Unfortunately the recursive copy command on Linux (i.e.
cp -r) doesn't like selective commands like this one:
cp -r sourceDir/*.properties destDir
Apparently, specifying a filename instead of a directory causes
cp not to create the directory structure on the destination side, so the command fails:
[root@cvgws901 temp]# cp -r sourceDir/*.properties backup cp: cannot stat `sourceDir/*.prop': No such file or directory
I'm sure I could have researched this and found a more elegant solution (like possibly the right params for
cp. But sometimes its more important to be done than to be elegant. This is one of those times. I wrote this script in about 5 minutes and have used it several times already. Enjoy.
#! /bin/bash -x # # cps.sh - copy selective # Chris Freyer 1/26/2009 # # Selectively finds files (fileMask) located # in the source directory (sourceDir) and copies them # to the destination directory (destDir), reproducting the structure # while copying. sourceDir=myproject destDir=backup fileMask=*.properties find $sourceDir -name "$fileMask" -print | \ while read file do # ensure that dir exists then copy file mkdir -p $destDir/`dirname "$file"` cp "$file" $destDir/$file done