Como tar-bzip arquivos antigos em grupos anuais

2

Eu gostaria de saber um comando que posso usar para pegar e arquivar todos os arquivos por um ano de cada vez. Eu estou trabalhando em um diretório que tem 72000 arquivos, com arquivos datados de 2007 para atual. E eu gostaria de tornar isso mais fácil de lidar com arquivos antigos em grupos de um ano. Assim, todos os arquivos de 1-1-2007 a 31-12-2007, etc. Obrigado pela ajuda!

    
por Bruce 10.07.2015 / 01:47

1 resposta

1

Você pode usar o find command para selecionar arquivos com base no tempo de modificação deles .

cd /path/to/directory
find -type f -newermt 2007-01-01 ! -newermt 2008-01-01

Observe que isso seleciona arquivos criados em 2007 em seu fuso horário, e os arquivos com registro de data e hora exatamente à meia-noite do ano são agrupados com o ano anterior.

Se a sua versão do CentOS tem uma versão antiga de find que não suporta -newermt , você pode usar -newer com arquivos fencepost.

touch -d 2007-01-01 /tmp/2007-01-01
touch -d 2008-01-01 /tmp/2008-01-01
find -type f -newer /tmp/2007-01-01 ! -newer /tmp/2008-01-01

Supondo que os nomes dos arquivos não contenham novas linhas, você pode canalizar a listagem resultante como entrada para tar com a opção -T ( -T - significa ler nomes de arquivos da entrada padrão).

cd /path/to/directory
find -type f -newermt 2007-01-01 ! -newermt 2008-01-01 |
tar -cjf /elsewhere/2007.tar.bz2 -T -

(Considere tar -cJf /elsewhere/2007.tar.xz , em vez disso, xz é mais rápido para descompactar e compactar melhor, ao custo de exigir mais memória ao compactar.)

    
por 10.07.2015 / 02:11