根据最后修改日期执行程序

根据最后修改日期执行程序

我需要编写一个脚本,该脚本将根据上次修改日期执行目录中的一些可执行文件。最年长的应该先跑。我该怎么做?

这就是我到目前为止所做的

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

答案1

默认情况下,Shell 通配符按词法顺序展开。如果您需要不同的排序顺序,则需要一个支持指定顺序的 shell,zsh这可能是一件好事,因为您已经zsh在那里使用语法(通过不引用$f)。

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

(.NOm)部分是zsh的通配限定符。.仅适用于常规文件,N如果没有匹配的文件,则展开为空,而不是报告错误(就像nullglob启用了该选项一样),在修改时Om转换为order(大写表示相反顺序) 。m

对于 GNU shell ( 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

相关内容