最終更新日に従ってプログラムを実行する

最終更新日に従ってプログラムを実行する

最終更新日に従ってディレクトリ内のいくつかの実行可能ファイルを実行するスクリプトを作成する必要があります。最も古いものが最初に実行される必要があります。どうすればいいでしょうか?

これまで私がやってきたことはこれです

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有効になっている場合と同様)、変更時に rder (逆順の場合は大文字)Omにします。om

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

関連情報