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 zsh
cual probablemente sea algo bueno ya que ya está usando zsh
la sintaxis allí (al no citar $f
).
for f in ./jobqueue/*(.NOm); do
chmod +x $f
$f
done
La (.NOm)
parte son zsh
los calificadores globales. .
solo para archivos normales, N
expandirse a nada si no hay ningún archivo coincidente en lugar de informar un error (como si la nullglob
opción estuviera habilitada), Om
ordenar 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