最終修正日に基づいてプログラムを実行する

最終修正日に基づいてプログラムを実行する

最後に変更された日付に基づいて、ディレクトリ内のいくつかの実行可能ファイルを実行するスクリプトを作成する必要があります。最も古いものは最初に実行する必要があります。どうすればいいですか?

これが私がこれまでにしたことです。

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

ベストアンサー1

デフォルトでは、シェルワイルドカードは語彙順に展開されます。別のソート順序が必要な場合は、順序付けをサポートするシェルが必要です。これはすでにその構文を引用せずに使用しているzshため、おそらく良いことでしょう。zsh$f

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

この(.NOm)部分はzshワイルドカード修飾子です。.通常のファイルにのみ適用されます。N一致するファイルが存在しない場合は、エラーを報告するのではなく拡張機能が空になり(オプションが有効になっているかのように)、修正nullglob時にrderOmに変換されます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

おすすめ記事