Execução de um programa de acordo com a data da última modificação

0

Eu preciso escrever um script que execute alguns executáveis em um diretório de acordo com a data da última modificação. O mais antigo deve ser o primeiro. Como faço isso?

Isso é o que eu fiz até agora

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

2 respostas

2

Desde que seus nomes de arquivos não contenham espaços, guias ou novas linhas ou ? ou * ou [ e que o diretório não contenha subdiretórios, você pode tentar algo como

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

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

done
    
por 25.04.2013 / 21:45
3

Os globbings do shell são expandidos em ordem lexical por padrão. Se você precisar de uma ordem de classificação diferente, precisará de um shell que suporte a especificação da ordem como zsh , o que provavelmente é uma coisa boa, pois você já está usando a sintaxe zsh (não citando $f ). / p>

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

A parte (.NOm) é os qualificadores globbing de zsh . . apenas para arquivos regulares, N para expandir para nada se não houver nenhum arquivo correspondente em vez de relatar um erro (como se a opção nullglob estivesse ativada), Om a o rder (maiúsculas por ordem inversa) em m tempo de odificação.

Com o shell GNU ( bash ) e com o GNU ls , o equivalente seria:

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
    
por 25.04.2013 / 21:27