Excluir arquivos com base no ano

5

Eu preciso excluir todos os arquivos em um diretório que foram criados em 2009. Que comando posso usar para fazer isso?

    
por Viralk 21.07.2011 / 16:04

3 respostas

9

A maioria dos sistemas de arquivos não armazena o tempo de criação de um arquivo, então o melhor que você pode fazer é verificar a última vez que o arquivo foi modificado.

Se você tiver uma versão recente do GNU find (por exemplo, no Linux ou Cygwin) ou FreeBSD ou OSX, você pode comparar diretamente a data de um arquivo com a de outro arquivo. Além disso, essas versões do find podem usar o tempo de criação do arquivo (chamado de seu horário de nascimento, indicado por B ), se estiver disponível em seu sistema. Substitua B por m abaixo para usar a hora da modificação em vez da hora de nascimento.

find /path/to/directory -newerBt '2009-01-01' ! -newerBt '2010-01-01' -type f -delete

Execute uma vez sem -delete primeiro para garantir que esses arquivos sejam os desejados. O comando acima também excluirá arquivos em subdiretórios; se isso não for desejado, adicione -mindepth 1 -maxdepth 1 após o nome do diretório.

Se a sua versão de find não tiver o -newerXY primary, você precisará criar arquivos de timestamp para marcar os limites do intervalo de vezes que deseja corresponder.

touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
find /path/to/directory -newer /tmp/from ! -newer /tmp/to -type f -exec rm {} +

Os qualificadores do Zsh podem corresponder arquivos em um intervalo de tempo, mas os limites podem ser indicado apenas em relação à data atual (por exemplo, N dias atrás).

rm /path/to/directory/*(.m+566^m+931)

Você também pode usar arquivos de registro de data e hora para datas precisas, mas perde na abrangência.

touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
rm /path/to/directory/*(.e\''[[ $REPLY -nt /tmp/from && $REPLY -ot /tmp/to ]]'\')
    
por 21.07.2011 / 17:24
1

Outros disseram find , mas você também pode querer verificar tmpwatch .

    
por 22.07.2011 / 02:52
0

O comando find , com as opções adequadas, deve ser capaz de fazer exatamente o que você deseja.

Desde que você formulou sua pergunta praticamente como uma lição de casa, eu vou deixar uma leitura completa da página de manual como um exercício para o clued; este tutorial fornecido por @jfgagne deve ajudar bastante.

    
por 21.07.2011 / 16:31