#!/bin/bash function main { local file packages pack pkgsrc exec 3>&0 # cette boucle permet de rechercher le package à utiliser pour trouver # le fichier si cela est possible while read file packages; do echo -n \# >&2 if [ -z "$packages" ] ; then echo "##no package## $file" >> $LOGFILE echo "$file" >> $TMPDIR/OUTPUT continue fi for pack in ${packages//,/ }; do pkgsrc=$(find $SEARCHPATH -name ${pack}'*'.lst | head -1) [ "$pkgsrc" ] && break done if [ -z "$pkgsrc" ]; then echo "##no package## $file $packages" >> $LOGFILE echo "$file $packages" >> $TMPDIR/OUTPUT continue fi set -- $( grep "$file" $pkgsrc | awk '{ if ($8=="'$file'") print $0; }' ) if [ -z "$*" ]; then pkgsrc=$( basename $pkgsrc .lst ) echo "##not found## $file $pkgsrc,${pkgsrc%-*},${pkgsrc%-*-*},${pkgsrc%%[._-][0-9]*}" >> $LOGFILE echo "$file $packages" >> $TMPDIR/OUTPUT continue fi pkgsrc=$( basename $pkgsrc .lst ) echo $file $pkgsrc,${pkgsrc%-*},${pkgsrc%-*-*},${pkgsrc%%[._-][0-9]*} >> $TMPDIR/OUTPUT echo $file $pkgsrc,${pkgsrc%-*},${pkgsrc%-*-*},${pkgsrc%%[._-][0-9]*} >> $LOGFILE done < $LFILES echo "." >&2 } # temporary file and directory TMP=$(date +%y%m%d)-$RANDOM while [ -e /tmp/pg-$TMP ] ; do TMP=$(date +%y%m%d)-$RANDOM ; done TMPDIR=/tmp/pg-$TMP PRINTUSAGE=0 # traitement des parametres if [ $# -eq 0 ]; then PRINTUSAGE=1 fi while [ $# -gt 0 ] ; do case "$1" in -i) # fichierssources des autres fichiers [ "$2" ] || PRINTUSAGE=1 INPUT=( $INPUT $2 ) shift; ;; -u) # update first source file with results UPDATE=1 ;; -o) # fichier destination remis a jour [ "$2" ] || PRINTUSAGE=1 OUTPUT=$2 shift; ;; -l) # fichier de reference pour les associations fichier/package [ "$2" ] || PRINTUSAGE=1 LOGFILE="$2" shift ;; -p) # repertoire de recherche pour les packages [ "$2" ] || PRINTUSAGE=1 SEARCHPATH="$SEARCHPATH $2/." shift ;; -h) # affiche l'aide sur les paramètres PRINTUSAGE=1 shift ;; esac shift done # repertoire contenant les .lst et les .tgz servant de source SEARCHPATH=${SEARCHPATH:-${PKGROOT:+$PKGROOT/.}} SEARCHPATH=${SEARCHPATH:-.} if [ $PRINTUSAGE -gt 0 ]; then # affiche les lignes du case ci-dessus echo "Usage : $0 followed by these parameters :" grep '^[ ]\+-.) #.*' $0 echo exit 1 fi DATE=$(date +%Y%m%d-%H%M%S) LOGFILE=${LOGFILE:-/tmp/package-$DATE.log} if [ -e $LOGFILE ] ; then echo "Error : log file $LOGFILE exists." exit 0 fi # fabrication des fichiers temporaires mkdir -p -m 700 $TMPDIR # fichier contenant l'ensemble des fichiers requis LFILES=$TMPDIR/lfiles ; touch $LFILES # fichier contenant la correspondance non du package source du package SFILES=$TMPDIR/sfiles ; touch $SFILES # fabrication d'un fichier contenant la liste de tous les fichiers recherchés # le fichier source peut contenir lui-même des informations de packages de provenance cat $INPUT > $LFILES sort -u $LFILES > $LFILES.new ; rm $LFILES ; mv $LFILES.new $LFILES main if [ -e $TMPDIR/OUTPUT ] ; then if [ "$UPDATE" == 1 -a "$INPUT" ] ; then set -- $INPUT rm -f $1 ; mv $TMPDIR/OUTPUT $1 echo "Le résultat est dans $1, et les opérations sont dans $LOGFILE" elif [ "$OUTPUT" ] ; then mv $TMPDIR/OUTPUT $OUTPUT echo "Le résultat est dans $OUTPUT, et les opérations sont dans $LOGFILE" else cat $TMPDIR/OUTPUT fi else echo "Aucun résultat produit. Consulter les opérations dans $LOGFILE" fi rm -rf $TMPDIR