Como listar todos os arquivos que não foram criados na quinta-feira

2

Eu preciso excluir os backups antigos, mas só quero manter os backups de quinta-feira e excluir o restante dos backups.

Me dê algumas dicas de kung fu. Eu estou no RHEL se isso faz diferença.

    
por OmiPenguin 09.03.2014 / 09:16

2 respostas

5

Com ferramentas GNU:

LC_ALL=C find . -name '*.backup' -type f -printf '%TA:%p
find . -name 'backup-*.dump' -type f -print0 |
  perl -MTime::Piece -0lne 'print if m{/backup-(\d{4}-\d\d-\d\d)\.dump$}
    && Time::Piece->strptime($1, "%Y-%m-%d")->day ne "Thu"' |
  xargs -r0 rm -f
' | tr '
LC_ALL=C find . -name '*.backup' -type f -printf '%TA:%p
find . -name 'backup-*.dump' -type f -print0 |
  perl -MTime::Piece -0lne 'print if m{/backup-(\d{4}-\d\d-\d\d)\.dump$}
    && Time::Piece->strptime($1, "%Y-%m-%d")->day ne "Thu"' |
  xargs -r0 rm -f
' | tr '%pre%\n' '\n%pre%' | grep -v '^Thursday:' | cut -d: -f2- | tr '%pre%\n' '\n%pre%' | xargs -r0 rm -f
\n' '\n%pre%' | grep -v '^Thursday:' | cut -d: -f2- | tr '%pre%\n' '\n%pre%' | xargs -r0 rm -f

Isso procura a hora da última modificação dos arquivos. Se o backup foi iniciado na quinta-feira, mas não foi concluído até a manhã de sexta-feira, o horário da última modificação será na sexta-feira.

Se a data de backup estiver no nome do arquivo como backup-2014-04-06.dump , você faria:

%pre%     
por 09.03.2014 / 09:46
1

Defina ls -l para mostrar o dia da semana da hora da modificação (o tempo de criação no linux é ambíguo). Então é só usar o awk para listar todos que não foram modificados na quinta (quinta-feira = 4):

ls -l --time-style=+%w | awk '$6!=4{print $0}'

Em seguida, você pode analisar isso para obter a lista de arquivos e iterar com um loop for ou algo assim.

    
por 09.03.2014 / 09:48