======== devtools/join_automic_object_directories.sh #!/bin/bash # Hiermit werden alle Automic Objekte in Einzelnen Dateien in einem oder mehreren # Verzeichissen zu einer xml-Datei zusammengefügt, # welche über die AWI importiert werden kann. # Das Ergebnis wird im HOME-Verzeichnis # unter dem Namen joined_objexts.xml abgelegt. # TODO: Es wäre schön, wenn verschachtelte Verzeichnisse rekursiv abgearbeitet und # die Verzeichnisstruktur in der Ausgabe mit angelegt würde (siehe split_automic_export.sh) function usage { $_USAGE_ALREADY_PRINTED && return echo "usage: $0 [ ... ] " _USAGE_ALREADY_PRINTED=true } _USAGE_ALREADY_PRINTED=false (( $# > 0 )) || usage; function join_automic_object_dirs { REPODIR=$1 ; REPODIR=${REPODIR%/} ; REPOFILE=${REPODIR#*automic_objects/} REPOFILE=${REPOFILE//\//.}.xml HEAD= ; TAIL= for file in $(ls -t $REPODIR/*.xml); do [ -n "$HEAD" ] || { HEAD=$(head -2 $file) TAIL=$(tail -1 $file) echo "$HEAD" > $REPOFILE } xmllint --xpath "/uc-export/*[*]" $file >> $REPOFILE done echo "$TAIL" >> $REPOFILE echo "objects combined to $REPOFILE" } for REPODIR in "$@" ; do join_automic_object_dirs $REPODIR || usage done ======== devtools/join_automic_objects.sh #!/bin/bash # Hiermit werden Automic Objekte in Einzelnen Dateien zu einer xml-Datei zusammengefügt, # welche über die AWI importiert werden kann. Das Ergebnis wird im HOME-Verzeichnis # unter dem Namen joined_objexts.xml abgelegt. function usage { echo "usage: $0 [ ... ] " return 1 } (( $# > 0 )) || usage; function join_automic_objects { REPOFILE=~/joined_objects.xml HEAD= ; TAIL= for file in $@; do [ -n "$HEAD" ] || { HEAD=$(head -2 $file) TAIL=$(tail -1 $file) echo "$HEAD" > $REPOFILE } xmllint --xpath "/uc-export/*[*]" $file >> $REPOFILE done echo "$TAIL" >> $REPOFILE echo "objects combined to $REPOFILE" } join_automic_objects $@ || usage ======== devtools/rename_automic_object.sh #!/bin/bash # Hiermit wird in allen xml-Dateien im aktuellen Verzeichnis ein String (z.B. Objektname oder Bestandteil # ersetzt. # !Achtung: Es wird eine einefache Textersetzung durchgeführt, falls der zu ersetzende Text andereitig # vorkommt, kann es zu Fehlern kommen, es empfiehlt sich die Ergebnisse zu diffen (es werden Dateien mit dem # Prefix orig_version_before_rename_ angelegt. function usage { echo "usage: $0 " return 1 } (( $# == 2 )) || usage; function rename_automic_object { FROM=$1 ; TO=$2 ; PREFIX=orig_version_before_rename_$$ mv $1.xml $2.xml ; perl -i$PREFIX\* -pe s/$1/$2/g *.xml ; rm $PREFIX*.xml } rename_automic_object $@ || usage ======== devtools/split_automic_export.sh #!/bin/bash # Hiermit wird eine aus der AWI exportierte xml-Datei in Einzeldateien für die einzelnen Objekte zerlegt. # Wenn ein Verzeichis (mit Unterverzeichnissen) exportiert wird, wird die Verzeichnisstruktur im Dateisystem # entsprechend angelegt. function usage { echo "usage: $0 " echo "example: $0 ~/Downloads/export.xml" return 1 } (( $# == 1 )) || usage; function split_automic_export { EXPORTFILE="$1" HEAD=$(head -2 "$EXPORTFILE") TAIL=$(tail -1 "$EXPORTFILE") for NAME in $(xmllint --xpath "/uc-export/*/@name" "$EXPORTFILE"); do NAME=${NAME#*=}; NAME=${NAME//\"} echo "writing $NAME to $MY_DIR/${MAPPING[$NAME]}/$NAME.xml" mkdir -p $MY_DIR/${MAPPING[$NAME]} || return 1 { echo "$HEAD"; xmllint --xpath "/uc-export/*[@name='$NAME']" "$EXPORTFILE" ; echo ; echo "$TAIL" ; } \ > "$MY_DIR/${MAPPING[$NAME]}/$NAME.xml" \ || return 1 done } function read_directory_structure { local EXPORTFILE="$1" local PARENT="$2" local FOLD="$3" for NAME in $(xmllint --xpath "/uc-export/FolderStruct$FOLD/FOLD/@name" "$EXPORTFILE" 2>/dev/null); do # The subdirectories NAME=${NAME#*=}; NAME=${NAME//\"} read_directory_structure "$EXPORTFILE" "$PARENT/$NAME" "${FOLD}/FOLD[@name=\"${NAME}\"]" done # The objects for NAME in $(xmllint --xpath "/uc-export/FolderStruct$FOLD/*[local-name()!=\"FOLD\"]/@name" "$EXPORTFILE" 2>/dev/null); do NAME=${NAME#*=}; NAME=${NAME//\"} #echo "$NAME -> $PARENT/$NAME" MAPPING[$NAME]=$PARENT; done } function main { MY_DIR=$PWD typeset -A MAPPING for EXPORTFILE in "$@" ; do read_directory_structure "$1" "" "" split_automic_export "$1" done } main "$@" || usage