Выполнение программы в соответствии с последней измененной датой

Выполнение программы в соответствии с последней измененной датой

Мне нужно написать скрипт, который будет запускать некоторые исполняемые файлы в каталоге в соответствии с последней датой изменения. Сначала должен запускаться самый старый. Как это сделать?

Вот что я сделал на данный момент

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

решение1

Подстановки Shell по умолчанию расширяются в лексическом порядке. Если вам нужен другой порядок сортировки, вам понадобится оболочка, которая поддерживает указание порядка, например , zshчто, вероятно, хорошо, поскольку вы уже используете zshтам синтаксис (не заключая в кавычки $f).

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

Эта (.NOm)часть — zshквалификаторы подстановки. .Только для обычных файлов, Nчтобы ничего не расширять, если нет соответствующего файла, вместо сообщения об ошибке (как если бы опция nullglobбыла включена), Omчтобы oупорядочить (в верхнем регистре для обратного порядка) во mвремя модификации.

С оболочкой GNU ( bash) и с GNU lsэквивалент будет таким:

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

решение2

При условии, что имена ваших файлов не содержат пробелов, табуляции, символов новой строки или ?или *или [и что каталог не содержит подкаталогов, вы можете попробовать что-то вроде

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

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

done

Связанный контент