diff --git a/cpexp b/cpexp new file mode 100755 index 0000000000000000000000000000000000000000..0e841c8f7669dfb86f72b4e9fc3ba5f68d445523 --- /dev/null +++ b/cpexp @@ -0,0 +1,31 @@ +#! /bin/sh +# +# Compare experiment setups trying to identify file pairs. +# +# $Id$ +# + +PROGRAM=`basename $0` +BINDIR=`dirname $0` +PATH="$BINDIR:$PATH" + +die () { + echo "$@" >&2 + exit 1 +} + +[ "x$2" = x ] && die "Oops: invalid number of parameters +Usage: $PROGRAM config_a new_exp_id [key=value...]" + +CONFIG_A=$1 +EXP_B=$2 +shift; shift + +eval `getexp -v "$CONFIG_A" "$@" || echo \; exit $?` +EXP_A=$EXP_ID + +set $SCRIPT_DIR $WORK_DIR $RESTART_DIR $DATA_DIR $LOG_DIR $MON_DIR/$EXP_A ### $MON_DIR/index.html +for PATH_A +do + cppath "$EXP_A" "$EXP_B" "$PATH_A" +done diff --git a/cppath b/cppath new file mode 100755 index 0000000000000000000000000000000000000000..726350c11ddc8a0849e8ab5eb71eaf580a265f26 --- /dev/null +++ b/cppath @@ -0,0 +1,81 @@ +#! /bin/sh -e +# +# Compare experiment setups trying to identify file pairs. +# +# $Id$ +# + +PROGRAM=`basename $0` + +die () { + echo "$@" >&2 + exit 1 +} + +cp_exp_file () { + exp_a=$1 + exp_b=$2 + file_a=$3 + file_b=$4 + [ -e "$file_b" ] && die "Oops: cannot overwrite existing file '$file_b'" + case $(file -bi "$file_a") in + text/*) + trap 'rm -f $temp_b' 0 + temp_b=`mktemp` + sed "s,\<$exp_a\>,$exp_b,g;s,\<${exp_a}_,${exp_b}_,g" "$file_a" > $temp_b + mv $temp_b "$file_b" + chmod --reference="$file_a" "$file_b" + echo "$file_a x> $file_b" + ;; + *) + ln -v "$file_a" "$file_b" + ;; + esac +} + +[ "x$3" = x ] && die "Oops: invalid number of parameters +Usage: $PROGRAM experiment_id_a experiment_id_b path_to_a [path_to_b]" + +unset CDPATH + +EXP_A=$1 +EXP_B=$2 +PATH_A=$3 +# If path to b is not set or empty, use path to a as template +PATH_B=${4:-`echo "$PATH_A" | sed "s,$EXP_A,$EXP_B,g"`} + +if [ -d "$PATH_A" ] +then : +else + FIND_A="-name $(basename $PATH_A)" + PATH_A=$(dirname $PATH_A) + FIND_B=$(basename $PATH_B) + PATH_B=$(dirname $PATH_B) +fi + +mkdir -vp "$PATH_B" + +for DIR_A in $( + { + ( cd "$PATH_A" && + find . -type d ! -name . $FIND_A ) + } | sed 's,^\./,,' +) +do + DIR_B=`echo "$DIR_A" | sed "s,$EXP_A,$EXP_B,g"` + mkdir -v "$PATH_B"/"$DIR_B" +done + +for FILE_A in $( + { + ( cd "$PATH_A" && + find . ! -type d $FIND_A ) + } | sed 's,^\./,,' +) +do + FILE_B=${FIND_B:-$(echo "$FILE_A" | sed "s,$EXP_A,$EXP_B,g")} + cp_exp_file "$EXP_A" "$EXP_B" "$PATH_A/$FILE_A" "$PATH_B/$FILE_B" || + STATUS=$? +done + +exit $STATUS