Ausführen eines Programms entsprechend dem letzten Änderungsdatum

Ausführen eines Programms entsprechend dem letzten Änderungsdatum

Ich muss ein Skript schreiben, das einige ausführbare Dateien in einem Verzeichnis entsprechend dem letzten Änderungsdatum ausführt. Die älteste sollte zuerst ausgeführt werden. Wie mache ich das?

Das habe ich bisher getan

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

Antwort1

Shell-Globbings werden standardmäßig in lexikalischer Reihenfolge erweitert. Wenn Sie eine andere Sortierreihenfolge benötigen, brauchen Sie eine Shell, die die Angabe der Reihenfolge unterstützt, zshwas wahrscheinlich eine gute Sache ist, da Sie dort bereits Syntax verwenden zsh(indem Sie keine Anführungszeichen setzen $f).

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

Der (.NOm)Teil besteht zshaus Globbing-Qualifizierern. .Nur für normale Dateien, Num bei fehlender passender Datei auf nichts zu erweitern, anstatt einen Fehler zu melden (als ob die nullglobOption aktiviert wäre), Omum beim Ändern order (Großbuchstaben für umgekehrte Reihenfolge) zu verwenden .m

Mit der GNU-Shell ( bash) und mit GNU lswäre das Äquivalent:

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

Antwort2

Vorausgesetzt, dass Ihre Dateinamen keine Leerzeichen, Tabulatoren, Zeilenumbrüche oder ?oder *oder enthalten [und dass das Verzeichnis keine Unterverzeichnisse enthält, können Sie etwas wie

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

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

done

verwandte Informationen