Pro/Engineer: Individuare le dipendenze di un file DRW (messa in tavola)

Ho realizzato uno script bash (gli utenti Windows possono utilizzarlo tramite MSYS ) che consente di verificare, per ogni file DRW (le messe in tavola) contenuto nella medesima cartella dove si esegue il comando, se sono presenti tutte le dipendenze che servono per aprirlo (cioè i file PRT e ASM).

Specificando una cartella sorgente, nel caso in cui non trova le dipendenze, va a cercarle ed eventualmente copiarle in automatico nella cartella di esecuzione comando.

Il sorgente dello script è il seguente:

#!/bin/bash

# $Revision: 1.1 $
# $Date: 2012/03/19 13:14:02 $

# By UDA'Software 2012

# Questo file script serve per verificare se, nella cartella corrente,
# i DRW presenti possono accedere a tutti i files necessari per essere
# aperti.

################################################################################
#_______________________________________________________________________________
if [ "${1}" == "--help" ]; then
    cat<<EOF
$0 [source_path]

Il programma verifica, per ogni DRW trovato nella cartella corrente,
se in quest'ultima sono presenti tutti i files necessari per aprirlo
correttamente.

Specificando il parametro "source_path" (percorso origine), se un file
necessario non viene trovato nella cartella corrente, lo cerca nel
"percorso origine" e, se lo trova, lo copia automaticamente in quella
corrente.

EOF
    exit 0
fi

source_path="${1}"
if [ "${source_path}" != "" ]; then
    SOURCE_COMPONENTS_DB=$(ls "${source_path}" | grep -i -e "\.asm" -e "\.prt" -e "\.frm" | sort -n -t. -k3 -r | sed 's@^@:@')
fi

################################################################################
#_______________________________________________________________________________
# Genera la lista dei DRW.
DRAWINGS_DB=$(ls | grep -i "\.drw" | sort -n -t. -k3 -r)

# Genera la lista degli ASM e dei PRT.
COMPONENTS_DB=$(ls | grep -i -e "\.asm" -e "\.prt" -e "\.frm" | tr [:lower:] [:upper:] | sort -n -t. -k3 -r | sed 's@^@:@')

################################################################################
#_______________________________________________________________________________
rm -vf PROE_check_drw_dependency.txt

################################################################################
#_______________________________________________________________________________
IFS=$'\n'
for drawing in ${DRAWINGS_DB}; do
    drawing_name=$(echo "${drawing}" | sed 's@\.[0-9]*$@@')
    if [ "$(echo "${drawings_name_elaborated}" | grep "/${drawing_name}/")" == "" ]; then
	drawings_name_elaborated="${drawings_name_elaborated}/${drawing_name}/"

	printf '* ANALISI DI: %s\n' "${drawing}"
	printf '* ANALISI DI: %s\n' "${drawing}" | sed 's@$@\r@' >> PROE_check_drw_dependency.txt
	drawing_dependency=$(strings "${drawing}" | grep '^3 3 ' | awk '{print $3}' | sed 's@.*!@@')

	for dependency in ${drawing_dependency}; do
	    is_family_table=$(echo "${dependency}" | grep -o '<.*>' | sed 's@\(<\|>\)@@g')
	    if [ "${is_family_table}" != "" ]; then
		item_family_table=$(echo "${dependency}" | cut -f1 -d'<')
		dependency="${is_family_table}"
	    fi

	    dependency_found=$(echo "${COMPONENTS_DB}" \
		| grep -F -e ":${dependency}.ASM" -e ":${dependency}.PRT" -e ":${dependency}.FRM" \
		| sed 's@^:@@' \
		| tr [:upper:] [:lower:])

	    components_name_elaborated=""
	    for item_dependency_found in ${dependency_found}; do
		component_name=$(echo "${item_dependency_found}" | sed 's@\.[0-9]*$@@')

		if [ "$(echo "${components_name_elaborated}" | grep "/${component_name}/")" == "" ]; then
		    components_name_elaborated="${components_name_elaborated}/${component_name}/"

		    if [ "${is_family_table}" != "" ]; then
			item_FT_dependency_found=$(strings "${item_dependency_found}" \
			    | grep "^3 18 ${item_family_table}" \
			    | awk '{print $3}' \
			    | sed 's@.*!@@' \
			    | sort \
			    | uniq \
			    | tail -n1)

			if [ "${item_FT_dependency_found}" != "" ]; then
			    printf ' \_ FOUND   : %39s [%s]\n' "${item_dependency_found}" "${item_FT_dependency_found}"
			    printf ' \_ FOUND   : %39s [%s]\n' "${item_dependency_found}" "${item_FT_dependency_found}" | sed 's@$@\r@' >> PROE_check_drw_dependency.txt
			else
			    printf ' \_ FOUND   : %39s <== [MISSING FT: %s]\n' "${item_dependency_found}" "${item_family_table}"
			    printf ' \_ FOUND   : %39s <== [MISSING FT: %s]\n' "${item_dependency_found}" "${item_family_table}" | sed 's@$@\r@' >> PROE_check_drw_dependency.txt
			fi
		    else
			printf ' \_ FOUND   : %39s\n' "${item_dependency_found}"
			printf ' \_ FOUND   : %39s\n' "${item_dependency_found}" | sed 's@$@\r@' >> PROE_check_drw_dependency.txt
		    fi
		fi
	    done

	    if [ "${dependency_found}" == "" ]; then
		printf ' \_ MISSING : %39s <== [*]\n' "${dependency}"
		printf ' \_ MISSING : %39s <== [*]\n' "${dependency}" | sed 's@$@\r@' >> PROE_check_drw_dependency.txt

		if [ "${source_path}" != "" ]; then
		    source_dependency_found=$(echo "${SOURCE_COMPONENTS_DB}" \
			| grep -iF -e ":${dependency}.ASM" -e ":${dependency}.PRT" -e ":${dependency}.FRM" \
			| sed 's@^:@@' \
			| head -n1)
		    if [ "${source_dependency_found}" != "" ]; then
			printf '   \_ FOUND : %39s [%s]\n' "${dependency}" "${source_path}${source_dependency_found}"
			printf '   \_ FOUND : %39s [%s]\n' "${dependency}" "${source_path}${source_dependency_found}" >> PROE_check_drw_dependency.txt

			cp -v "${source_path}${source_dependency_found}" .
			COMPONENTS_DB=$(ls | grep -i -e "\.asm" -e "\.prt" -e "\.frm" | tr [:lower:] [:upper:] | sort -n -t. -k3 -r | sed 's@^@:@')
		    fi
		fi
	    fi
	done
    fi
done

################################################################################
#_______________________________________________________________________________