https://foro.gambas-es.org/viewtopic.php?f=6&t=7671&p=46069#p46069
-----------------------------------
tincho
Lunes, 02 Septiembre 2019, 11:19

Re: Necesito Un Shell Script Que Compare Versiones
-----------------------------------
Ya esta luego de romperme un poco el coco, ya que quería hacerlo con array, logre hacer el dichoso script en bash.
[code linenumbers=false syntax=bash]
#!/bin/bash

# Leyendo directorios y creando la lista única de paquetes
scandir=/home/bonavena/paquetes
newdir=/home/bonavena/paquetes/new
olddir=/home/bonavena/paquetes/old
echo > a.txt
find $scandir -name '*.deb' | while read -r f
do
b=`echo "${f##*/}"`
p=`echo $b | cut -d "_" -f 1`
v=`echo $b | cut -d "_" -f 2`
echo $p >> a.txt
uniq a.txt u.txt
done
# Creación de archivos auxiliares
while IFS= read -r line; do
  if [[ $line != " " ]]
        then
          echo " " > $line.txt
          find $scandir -name "*$line\_*.deb" | while read -r f
          do
            b=`echo "${f##*/}"`
            p=`echo $b | cut -d "_" -f 1`
            v=`echo $b | cut -d "_" -f 2`
          echo "$b~$f" >> $line.txt
          done
          sort -r $line.txt -o $line.txt
          # Moviendo cada paquete a su directorios
          while IFS= read -r dat; do
            pkg=`echo $dat | cut -d "~" -f 2`
                    if [[ $dat != " " ]]
                    then
                      last=`echo $dat | cut -d "~" -f 1`
                      #echo $last ${dat##*/}
                      break
                    fi

          done < $line.txt

          echo "Last package "$last

          while IFS= read -r dat2; do
            pkg=`echo $dat2 | cut -d "~" -f 2`
                    if [[ $dat2 != " " ]]
                    then
                        if [[ ${dat2##*/} == $last ]]
                        then
                        #echo $dat
                              if [[ $pkg != $newdir"/"`echo ${dat2##*/}` ]]
                              then
                                mv -f $pkg $newdir"/"`echo ${dat2##*/}`
                              fi
                        else
                          echo $dat
                              if [[ $pkg != $olddir"/"`echo ${dat2##*/}` ]]
                              then
                                mv -f $pkg $olddir"/"`echo ${dat2##*/}`
                              fi
                        fi
                    fi
          done < $line.txt
  fi
done < u.txt
[/code]

Bueno, de mas esta decir que lo prueben antes en un entorno de pruebas. o usar la opción [b]cp[/b] en vez de [b]mv[/b]
Otra cosa, yo tuve que correrlo con bash script.sh ya que con sh script.sh no funcionaba. Pero bueno eso en la maquina que lo probé, tal vez en la vuestra funcione con sh.
Saludos.


