#!/bin/csh -f if ($#argv != 2) then cat << EOF1 NAME link_dirtree - creates a virtual copy of one dir tree to another. the directory structure is duplicated and the files are linked. SYNOPSIS link_dirtree orig_dir new_dir EXAMPLES link_dirtree /fs/cgd/csm/inputdata /ptmp/$LOGNAME/my_inputdata EOF1 exit -1; endif #set orig_dir = /fs/cgd/csm/inputdata #set new_dir = /ptmp/$LOGNAME/inputdata set orig_dir = $argv[1] set new_dir = $argv[2] set cdir = `pwd` if (! -e ${orig_dir}) then echo "orig_dir does not exist : ${orig_dir}" exit -1 endif cd ${orig_dir} set odir = `pwd` cd ${cdir} if (! -e ${new_dir}) mkdir -p ${new_dir} if (! -e ${new_dir}) then echo "exit from ${new_dir}" exit -2 endif cd ${new_dir} set ndir = `pwd` echo " " echo "running link_dirtree (this could take a minute)" echo "orig_dir = $odir" echo "new_dir = $ndir" cd ${odir} # tcraig, this doesn't work on some platforms #find . -type d -exec mkdir -p "${new_dir}/{}" \; #find . -type f -exec ln -s -f "${orig_dir}/{}" "${new_dir}/{}" \; # tcraig, this doesn't work on bangkok find . -type d | xargs -L 1 -I {} mkdir -p ${ndir}/\{\} find . -type f | xargs -L 1 -I {} ln -s -f ${odir}/\{\} ${ndir}/\{\} cd ${cdir} exit 0