Pular para o conteúdo

Comparando arquivos por data

Depois de muito procurar, e não encontrar, resolvi desenvolver um script que recebe dois arquivos e retorna qual é o mais recente.

Espero que seja útil.
Abraços.
Guinux guinux
Hits: 9.367 Categoria: Shell Script Subcategoria: Avançado
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

Depois de muito procurar, e não encontrar, resolvi desenvolver um script que recebe dois arquivos e retorna qual é o mais recente.

Espero que seja útil.
Abraços.
Download data.sh Enviar nova versão

Esconder código-fonte

#!/bin/bash
#
# data.sh -
#
# Site      : http://www.software.inf.br
# Autor     : Guilherme Giuliani <guilherme@software.inf.br>
# Manutenção: Guilherme Giuliani <guilherme@software.inf.br>
#
#  -------------------------------------------------------------------------
#   Este programa recebe dois arquivos e retorna qual mais atual
#  -------------------------------------------------------------------------
#
#
# Histórico:
#
#    v1.0 2013-05-29, Guilherme Giuliani:
#       - Versão inicial do programa
#
#
# Ex. de Uso: $ ./data.sh arq1 arq2
# Licença: GPL.
#

#0=IGUAL #1=RECENTE #2=ANTIGO

DD1=`date -r $1 +%d`; MM1=`date -r $1 +%m`; AA1=`date -r $1 +%Y`; H1=`date -r $1 +%H`; M1=`date -r $1 +%M`; S1=`date -r $1 +%S`;
DD2=`date -r $2 +%d`; MM2=`date -r $2 +%m`; AA2=`date -r $2 +%Y`; H2=`date -r $2 +%H`; M2=`date -r $2 +%M`; S2=`date -r $2 +%S`;

        if [[ "AA1" -gt "AA2" ]]; then status="1"; elif [[ "AA1" -lt "AA2" ]]; then status="2"; elif [[ "AA1" -eq "AA2" ]]; then
        if [[ "MM1" -gt "MM2" ]]; then status="1"; elif [[ "MM1" -lt "MM2" ]]; then status="2"; elif [[ "MM1" -eq "MM2" ]]; then
        if [[ "DD1" -gt "DD2" ]]; then status="1"; elif [[ "DD1" -lt "DD2" ]]; then status="2"; elif [[ "DD1" -eq "DD2" ]]; then
        if [[ "H1" -gt "H2" ]]; then status="1"; elif [[ "H1" -lt "H2" ]]; then status="2"; elif [[ "H1" -eq "H2" ]]; then
        if [[ "M1" -gt "M2" ]]; then status="1"; elif [[ "M1" -lt "M2" ]]; then status="2"; elif [[ "M1" -eq "M2" ]]; then
        if [[ "S1" -gt "S2" ]]; then status="1"; elif [[ "S1" -lt "S2" ]]; then status="2"; elif [[ "S1" -eq "S2" ]]; then status="0";
        fi fi fi fi fi fi

echo $status

Utilitário para Slackware 10

Implementando Statement e RecordSet em bash script

Recriando /dev/null

Script de Firewall

Adicionar usuario

#1 Comentário enviado por itamarnet em 01/06/2013 - 16:14h
Ao invés de usar tantas variáveis poderia ser mais direto:

[ $(date -r $1 +%Y%m%d%H%M%S) -gt $(date -r $2 +%Y%m%d%H%M%S) ] && status=1 || status=2
[ $(date -r $1 +%Y%m%d%H%M%S) -eq $(date -r $2 +%Y%m%d%H%M%S) ] && status=0

É apenas uma sugestão.
#2 Comentário enviado por fabioeduardo em 29/10/2013 - 11:59h
Existe uma opção de comparação do test para isso:

[ arquivoNovo.txt -nt arquivoAntigo.txt ] && echo "O arquivo arquivoNovo.txt é mais recente"

Caso o primeiro arquivo seja mais recente será impresso na tela a frase do echo.

Contribuir com comentário

Entre na sua conta para comentar.