根據最後修改日期執行程序

根據最後修改日期執行程序

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

這就是我到目前為止所做的

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

相關內容