Linux
根據上次修改日期執行程序
我需要編寫一個腳本,該腳本將根據上次修改日期在目錄中執行一些執行檔。最老的應該先執行。我該怎麼做?
這是我到目前為止所做的
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
以rdero
(大寫的反向順序)在m
修改時間。使用 GNU shell (
bash
) 和 GNUls
,等價物是: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