最終更新日に従ってディレクトリ内のいくつかの実行可能ファイルを実行するスクリプトを作成する必要があります。最も古いものが最初に実行される必要があります。どうすればいいでしょうか?
これまで私がやってきたことはこれです
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