Obtenha os arquivos de backup mais recentes [duplicados]

0

Estou pesquisando isso, mas os termos são tão genéricos que estou obtendo muitos falsos positivos, então o que o hey, eu vou perguntar aqui. Tenho certeza de que há uma resposta simples, mas geralmente não escrevo em script * nix.

Estou tentando gravar um script de atualização de banco de dados em nosso ambiente de teste. Os backups são montados a partir de um compartilhamento smbfs, algo como /data/backups/prod , mas as subpastas ficam um pouco complicadas. Parece com myproddbserver/yyyymmdd , com vários arquivos abaixo.

Eu quero executar um comando restore que coletará os arquivos com nomes conhecidos do diretório yyyymmdd mais recente. Por exemplo, se eu tivesse:

myproddbserver/20130630/foo.bak
myproddbserver/20130630/bar.bak
myproddbserver/20130731/foo.bak
myproddbserver/20130731/bar.bak

Eu gostaria de restaurar myproddbserver/20130731/foo.bak e myproddbserver/20130731/bar.bak .

Como eu conseguiria obter esses caminhos com segurança?

    
por Jeremy Holovacs 13.08.2013 / 19:38

1 resposta

1

Como você está usando o formato yyyymmdd , uma classificação numérica funcionará bem. O caminho mais rápido será usar o comando sort :

newest_dir=$(printf '%s\n' myproddbserver/* | sort -rn | head -n1)

Você também pode fazer isso no bash puro:

newest=0
for d in myproddbserver/*; do
    (( d > newest )) && newest=$d
done

newest_files=("myproddbserver/$newest/"*)
printf '%s\n' "${newest_files[@]}"

A versão bash é provavelmente mais lenta, mas irá lidar com todos os nomes de arquivos possíveis. O método sort falhará se algum nome de arquivo contiver um caractere de nova linha.

    
por 13.08.2013 / 19:53