From ec79c1cc054466ca857ffae949ea9a6e443422bb Mon Sep 17 00:00:00 2001
From: Karl-Hermann Wieners <karl-hermann.wieners@mpimet.mpg.de>
Date: Wed, 25 May 2016 19:48:15 +0000
Subject: [PATCH] Added tools to copy experiment data to a new name (cpexp,
 cppath)

---
 cpexp  | 31 ++++++++++++++++++++++
 cppath | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 112 insertions(+)
 create mode 100755 cpexp
 create mode 100755 cppath

diff --git a/cpexp b/cpexp
new file mode 100755
index 0000000..0e841c8
--- /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 0000000..726350c
--- /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
-- 
GitLab