Linux

根據上次修改日期執行程序

  • April 29, 2013

我需要編寫一個腳本,該腳本將根據上次修改日期在目錄中執行一些執行檔。最老的應該先執行。我該怎麼做?

這是我到目前為止所做的

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

如果您的文件名不包含空格或製表符或換行符或?*[併且該目錄不包含子目錄,您可以嘗試類似

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

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

done

預設情況下,Shell globbing 按詞法順序展開。如果您需要不同的排序順序,則需要一個支持指定順序的 shell,zsh這可能是一件好事,因為您已經在zsh那裡使用了語法(通過不引用$f)。

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

(.NOm)部分是zsh的萬用字元。.僅適用於正常文件,N如果沒有匹配的文件而不是報告錯誤(好像nullglob啟用了該選項),則擴展為空,Om以rder o(大寫的反向順序)在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

引用自:https://unix.stackexchange.com/questions/73674