Hierbei handelt es sich um ein sehr exotisches Shell Script, das ich verwedet hatte um ein „vergewaltigtes“ Magento Theme zu säubern. Der beauftrage Freie Mitarbeiter hatte in einer Kopie des Magento base Theme gearbeitet. Natürlich hat er alle Dateien kopiert und das base Theme in default verschoben. Nachdem ich herausgefunden hatte um welches Theme es sich handelte wollte ich noch die Dateien entfernen die das Theme vom base Theme erbt. Ich habe dieses Script verwendet, das Dateien in gleichen Verzeichnisstrukturen abgleicht und gegebenfalls (beim Enthalten sein in beiden Strukturen, in selber Position) entfernt.

#! /bin/sh
 
## Input checks
if [ ! -n "$1" ] || [ ! -n "$2" ]; then
	echo "#
# diff_file_struct.sh - Reduce a file struct from a base file struct via MD5 sums (files and empty folders only)
# Usage: diff_file_struct.sh <BASE_STRUCT> <STRUCT_TO_REDUCE>
# "
	exit 1
fi
 
if [ ! -e "$1" ]; then	
	echo "# Parameter 1: Dir doesn't exist"
	exit 1
fi
 
if [ ! -e "$2" ]; then	
	echo "# Parameter 2: Dir doesn't exist"
	exit 1
fi
 
## List files recursiv
BASEFILES=$(find "$1" -type f)
REDUCEFILES=$(find "$2" -type f)
 
## Loop for each file in draft
for BASEFILE in $BASEFILES; do
 
	## Get MD5 hash
	TMP=$(md5sum "$BASEFILE")
	BASE_MD5=${TMP% *}
 
	## Get relative dir
	BASE_PATH_RELATIVE=${BASEFILE:${#1}}
 
	echo $BASE_PATH_RELATIVE
 
	## Loop for each file in new file struct
	for REDUCEFILE in $REDUCEFILES; do
 
			## Get relative dir
			REDUCE_PATH_RELATIVE=${REDUCEFILE:${#2}}			
 
			## Check if relative paths are equal
			if [ $BASE_PATH_RELATIVE == $REDUCE_PATH_RELATIVE ]; then
 
				echo "PATH MATCH"
 
				## Get MD5 hash
				TMP=$(md5sum "$REDUCEFILE")
				REDUCE_MD5=${TMP% *}
 
				## Check if MD5 hashs are equal
				if [ $BASE_MD5 == $REDUCE_MD5 ]; then
 
					echo "MD5 MATCH"
 
					## Remove equal file
					rm -v $REDUCEFILE
				fi			
			fi
	done
	echo "---"
done
 
echo "REMOVE EMTPY DIRS"
find "$2" -type d -empty -delete -print

Die Dateien mit dem Kommando „find“ zu suchen und listen ist ein suboptimales Vorgehen. Strukturiertes vorgehen, in dem Ordner für Ordner abgeglichen wird, ist wesentlich performanter. Bedeutet aber ebenso mehr Arbeitsaufwand, der für ein Script dieser Verwendungsart nicht vorgesehen ist. Ich hoffe zwar nicht jemand steht vor dem selben Problem „ein Magento Vererbungschaos zu säubern“, jedoch denke ich das Script findet sicher die eine oder andere Anwendungsmöglichkeit oder gibt einen Denkanstoß.

Keine Kommentare »