como usar o script shell verificando última vez que mudou de um arquivo
Pergunta
Eu quero encontrar se determinados arquivos são alterados nos últimos três minutos, a fim de decidir se o cp
foi bem sucedida, e se eu deveria exit
ou continuar o roteiro. Como posso fazer isso?
Graças
Solução
Você pode obter a última modificação de um arquivo com stat
, e a data atual com date
. Você pode usar seqüências de formato tanto para obtê-los em "segundos desde a época":
current=`date +%s`
last_modified=`stat -c "%Y" $file`
Então, é muito fácil de colocar isso em uma condição. Por exemplo:
if [ $(($current-$last_modified)) -gt 180 ]; then
echo "old";
else
echo "new";
fi
Outras dicas
A sintaxe deste comando if depende do seu shell particular, mas os comandos de data não. Eu uso o bash; modificar, se necessário.
if [ $(( $(date +%s) - $(date +%s -r <file>) )) -le 180 ]; then
# was modified in last three minutes
else
# was not modified in last three minutes
fi
O +%s
diz data para a saída de um tempo UNIX (o bit importante é que é um número inteiro em segundos). Você também pode usar estatísticas para obter essa informação - o stat -c %Y <file>
comando é equivalente. Certifique-se de uso %Y
não %y
, para que você obtenha um tempo utilizável em segundos.
O comando status lhe dará a hora da última modificação
stat -c %y <filename>
Encontre saída pode o nome do arquivo se ele foi modificado nos últimos 3 minutos.
find file1 -maxdepth 0 -mmin -3
A alteração de arquivo timestamp realmente não implica que você copiado com êxito.
Se você pousar corrompendo o arquivo ou o sistema de arquivos é executado fora do espaço,
você provavelmente ainda ver uma mudança timestamp (precisa confirmar isso).
Eu não obter o contexto exato de sua exigência.
Se você disparar um cp
, completa e retorna - não retorna enquanto ele está trabalhando
.
Então, não é o retorno (com código de sucesso de saída) um bom indicador do sucesso?
Como e por que você iria sair parcialmente numa operação cp
Ou, é que um script cp
lote que varre uma lista de arquivos ...
alguma elaboração ajudaria.