Encontrado aqui
for f in /abcd/xyz* do
[ "$f" -nt /abcd/test.txt ] && echo "file f$ found" done
Como posso verificar se file2
foi modificado pela última vez após file1
?
Neste exemplo, perl
foi modificado mais recentemente do que stack
. Existe um comando bash ou Linux que pode comparar esses arquivos com base na hora da modificação?
-rw-r--r-- 1 root root 1577 Sep 7 22:55 stack
-rwxr-xr-x 1 root root 626 Sep 7 23:10 perl
Encontrado aqui
for f in /abcd/xyz* do
[ "$f" -nt /abcd/test.txt ] && echo "file f$ found" done
if [[ FILE1 -nt FILE2 ]]; then
echo FILE1 is newer than FILE2
fi
Extraído de ' teste de homem '. Trecho:
FILE1 -nt FILE2
FILE1 is newer (modification date) than FILE2
Outra maneira de fazer isso:
find -name file2 -newer file1
retornará null se o arquivo2 for mais antigo ou a mesma idade que o arquivo1. Ele retornará o nome (e diretório) do arquivo2 se for mais recente.
Lembre-se de que o Linux não controla quando os arquivos foram criados. Estes testes serão para a data e hora de modificação mais recente.
echo $(($(date -r file1 +%s)-$(date -r file2 +%s)))
2208
Se o resultado for > 0, o primeiro arquivo é mais novo. (Mais recente em termos de última modificação - não em tempo de criação, que é armazenado no linux).
Se você quiser informações mais detalhadas, use o comando stat
<tbielawa>@(fridge)[~/SuperUser] 03:15:10
$ touch firstFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:24
$ touch secondFile
<tbielawa>@(fridge)[~/SuperUser] 03:15:45
$ stat firstFile
File: 'firstFile'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 151528 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/tbielawa) Gid: ( 500/tbielawa)
Access: 2010-09-14 03:15:24.938721003 -0400
Modify: 2010-09-14 03:15:24.938721003 -0400
Change: 2010-09-14 03:15:24.938721003 -0400
<tbielawa>@(fridge)[~/SuperUser] 03:15:48
$ stat secondFile
File: 'secondFile'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 805h/2053d Inode: 151529 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/tbielawa) Gid: ( 500/tbielawa)
Access: 2010-09-14 03:15:45.074722792 -0400
Modify: 2010-09-14 03:15:45.074722792 -0400
Change: 2010-09-14 03:15:45.074722792 -0400
De acordo com este link, o unix não armazena a data de criação. link
Mas armazene o último acesso.
para o último acesso
ls -t # displays in order of date. So the first one is the
ls exibe cada arquivo em uma nova linha.
so ls -t exibe o arquivo mais recente na primeira linha, etc.
Você pode usar sed para escolher a primeira linha.
ls -t php.exe php.ini | sed -n '1p' php.ini
poderia fazer -lt
, mas você verá que se você não especificar nenhum arquivo ... e ele faz o diretório ... então ele dá o total na primeira linha, então você escolhe a segunda linha
como $ls -lt | sed -n '2p'
Um bom seria
ls -t | head -n 1
ou
ls -lt | head
exibe as 10 primeiras linhas no primeiro arquivo modificado primeiro e você pode ver qual é
Aqui está um pequeno roteiro, eu fiz:
mtf0='stat -c %Y file0'
mtf1='stat -c %Y file1'
dt=$(( mtf1 - mtf0 ))
[[ $dt -gt 0 ]] && echo "File F1 is newer than file F0 "
Tags bash