Excluir arquivos mais antigos que o arquivo específico

11

Eu preciso excluir de uma pasta todos os arquivos mais antigos que um arquivo específico.
Executando o bash no CentOS 7.

Eu tenho uma solução para isso, mas acho que deveria haver uma maneira mais elegante de fazer isso:

reference_file=/my/reference/file

get_modify_time()
{
    stat $1 | grep -Po "Modify: \K[0-9- :]*"
}

pit=$(get_modify_time $reference_file)
for f in /folder/0000* ; do [[ "$pit" > "$(get_modify_time $f)" ]] && rm $f ; done
    
por csny 25.02.2015 / 12:07

2 respostas

20

Eu não tentei, mas find deve ser capaz de lidar com toda a operação:

$ find dir/ -type f ! -newer reference -delete

... ou ...

$ find dir/ -type f ! -newer reference ! -name reference -delete

Basicamente:

  • ! -newer reference corresponde a arquivos que foram modificados menos recentemente do que reference .
  • -delete os exclui.
  • ! -name reference exclui reference , caso também esteja localizado em dir/ e você deseja mantê-lo.

Isso deve excluir todos os arquivos com mais de reference e localizados em dir/ .

    
por 25.02.2015 / 13:00
5

compare os tempos de modificação do arquivo com test , usando os operadores -nt (mais recente que) e -ot (mais antigo que):

if [ "$file1" -ot "$file2" ]; then
    #do whatever you want;
fi
    
por 25.02.2015 / 13:01