Comparando tempos de arquivo em ksh

1

Eu desenvolvi um script que irá comparar duas datas.

#!/bin/ksh

####################################################################
#
#DECLARING ALL THE VALUES AND PATHS
#
####################################################################

LOG_FOLDER=/user/sba-appl/test/sscr/ramu
TARGET_DIR=/user/sba-appl/test/sscr/ramu

###################################################################
#
#GETTING THE TIME STAMP OF THE FILE
#
####################################################################

cd $TARGET_DIR
DEFAULT_DATE='ls -l /$TARGET_DIR/default.txt| awk '{print $6,$7,$8}''
printf "$DEFAULT_DATE \n"
for f in *.xml
    do
        echo "Processing $f"
        FILE_DATE='ls -l /$TARGET_DIR/$f|awk '{print $6,$7,$8}''
        printf "$FILE_DATE \n"
        echo "dafault filedate is $DEFAULT_DATE"
        if [ $FILE_DATE -gt $DEFAULT_DATE ]
        then
            echo "Call the Jar for the file $f"
        else
            echo "Do not call the Jar for the file $f"
        fi
done

Aqui estou enfrentando dois problemas:

1. Neste temos um arquivo padrão e este timestamp arquivo deve ser definido para o tempo antigo, ou seja, por exemplo, 1990. Eu sei que isso pode ser feito com a ajuda de touch -t com o timestamp .

Estou usando um ksh e stat não está presente aqui. Então estou usando ls -l . Mas se eu estiver usando o comando ls -l , ele listará o ano de 1990 (porque ele sempre listará o ano se o arquivo for 6 meses mais antigo). Nesse caso, meu valor default_date terá ano.

Então, acho que minha condição se está falhando com o ano chegando.

2. Mudei o timestamp dos arquivos incluindo default.txt dentro de 6 meses e verifiquei agora, mas ainda não está executando a parte if e está executando a parte else.

Eu também estou recebendo um operador de teste desconhecido. Alguém pode me dizer onde está indo errado. Será de grande ajuda se alguém puder verificar isso.

Estou enfrentando dois problemas aqui:

  1. Nesta comparação, a condição if não está funcionando corretamente.
  2. Sempre está imprimindo somente a outra parte.
por user1984839 24.05.2013 / 06:57

1 resposta

3

O Ksh tem um operador para comparar as datas de dois arquivos (também está disponível em ash, bash e zsh, mas não em POSIX). Você não precisa chamar ls ou stat ou qualquer coisa para ler as datas: deixe o shell compará-las.

for f in *.xml; do
  if [[ $f -nt default.txt ]]; then …
done
    
por 26.05.2013 / 01:40