Script bash do Linux para o arquivo mais antigo em uma pasta + valor de retorno se a pasta estiver vazia

1

Estou usando o SUSE Linux Enterprise Server 11 (x86_64)
Eu preciso encontrar um arquivo mais antigo de pastas e imprimi-lo em unixtime. Eu fiz o trabalho com este forro:
find $1 -maxdepth 1 -type f | xargs -i stat -c "%Y" '{}' | sort | head -n 1
(o $ 1 é para o Zabbix)

Mas quando a pasta fica vazia, o valor também parece estar vazio e meu software de monitoramento, o Zabbix, não pode manipular valores vazios, então preciso, por exemplo, imprimir o número 0 se a pasta estiver vazia.

Ok, então eu compus este belo roteiro, mas como todos vocês podem ver, é bastante chato. Então alguém poderia me ajudar com isso?
PARA SUA INFORMAÇÃO. Eu comecei a brincar com o linux dois dias atrás, então, por favor, fique comigo: P

#!/bin/bash    
export fileage
fileage=$(find -maxdepth 1 -type f | xargs -i stat -c "%Y" '{}' | sort | head -n 1)
if [ $? -eq 0 ]
then
   echo "0"  
else
   echo "fileage"
fi
    
por knob 23.05.2016 / 12:49

1 resposta

2

find pode imprimir qualquer um dos 3 timestamps que um arquivo / diretório pode ter. Você só precisa usar -printf com a sequência de formato apropriada: % C @ ou % A @ ou % T @ (veja o detalhe é man find ).

Quanto aos diretórios vazios, verificar se $? é 0 pode ser enganoso porque 0 código de retorno significa que "nada de ruim aconteceu", e um diretório vazio não conta "algo ruim", é apenas um caso especial, mas normal. Mas você pode armazenar o OUTPUT de find (e os seguintes comandos no pipe) e verificar se está vazio ou não.

Como

fileage=$(find $1 -maxdepth 1 -type f -printf "%T@\n" | sort | head -n 1)
if [ -z "fileage" ]; then
  echo 0
else
  echo $fileage
fi

ou, se você gosta de ser curto:

fileage=$(find $1 -maxdepth 1 -type f -printf "%T@\n" | sort | head -n 1)
echo ${fileage:=0}

Não obstante, tenha cuidado se você realmente quer ver o "arquivo mais antigo" porque isso significaria ler o tempo de criação do arquivo e que não é armazenado. Você pode ter o arquivo mais antigo com o mais novo de todos os três timestamps.

    
por 23.05.2016 / 13:32