Ejecutar un programa según la última fecha de modificación

Ejecutar un programa según la última fecha de modificación

Necesito escribir un script que ejecute algunos ejecutables en un directorio según la última fecha de modificación. El mayor debería correr primero. ¿Cómo lo hago?

Esto es lo que he hecho hasta ahora

for f in  ./jobqueue/*; #accessing the queue
do 
    chmod +x *  # giving executable permission for the files
    $f  # running the executables
done

Respuesta1

Los globbings de Shell se expanden en orden léxico de forma predeterminada. Si necesita un orden de clasificación diferente, necesitará un shell que admita especificar el orden, lo zshcual probablemente sea algo bueno ya que ya está usando zshla sintaxis allí (al no citar $f).

for f in  ./jobqueue/*(.NOm); do
  chmod +x $f
  $f
done

La (.NOm)parte son zshlos calificadores globales. .solo para archivos normales, Nexpandirse a nada si no hay ningún archivo coincidente en lugar de informar un error (como si la nullglobopción estuviera habilitada), Omordenar o(mayúsculas para el orden inverso) en el mmomento de la modificación.

Con el shell GNU ( bash) y con GNU ls, el equivalente sería:

eval "files=($(ls -drt --quoting-style=shell ./jobqueue/* 2> /dev/null))"
for f in "${files[@]}"
  [ -f "$f" ] && [ ! -L "$f" ] || continue
  chmod +x -- "$f"
  "$f"
done

Respuesta2

Siempre que sus nombres de archivos no contengan espacios, tabulaciones o nuevas líneas o ?o *o [y que el directorio no contenga subdirectorios, puede intentar algo como

for f in $(ls -tr ./jobqueue/) ; do

  chmod +x ./jobqueue/$f
  ./jobqueue/$f

done

información relacionada