Como faço para excluir arquivos maiores que uma determinada data no linux

4

Ocasionalmente extraio um arquivo na pasta errada e gostaria de mover ou excluir os arquivos recém-extraídos.

Qual é a maneira mais fácil de fazer isso através da linha de comando? Posso de alguma forma procurar por todos os arquivos que são mais recentes que o tempo de extração e pipe em rm?

obrigado

Tarski
fonte

Respostas:

12

Editar: Como observado nos comentários, tar modifica o mtime e o ctime dos arquivos extraídos para coincidir com as datas no arquivo, então este primeiro método não funcionará a menos que o -m bandeira foi usada durante a extração. O último método é ideal, mas pode resultar na exclusão de arquivos que você deseja se os nomes de arquivos colidirem.

find suporta um -newer file sinalizador, especificando que ele deve localizar arquivos Arquivo . touch tem um argumento -t para modificar o tempo de acesso / modificação em um arquivo. Então, para consertar um oops que ocorreu por volta das 19h25min30s:

$ tar xzf whoops.tar.gz
$ touch -t 200909261925.30 whoops-timestamp
$ find . -newer whoops-timestamp

E se você estiver confiante de que exibiu os arquivos corretos:

$ find . -newer whoops-timestamp -print0 | xargs -0 rm -v

Uma alternativa é excluir todos os arquivos listados no archive que você acabou de extrair:

$ tar tfz whoops.tar.gz | xargs rm -v
Annika Backstrom
fonte
(+1) A última opção é a melhor. É mais seguro e melhor do que o OP tinha em mente.
nagul
pergunta: o tar não configuraria o horário modificado para o dos arquivos originais? Não encontraria o tempo modificado (vs tempo de alteração?) Durante a comparação?
ericslaw
Obrigado! Eu usei a última maneira de fazer isso. O arquivo foi realmente um zip então eu fiz zipinfo -1 blah.zip | xargs rm -v
Tarski
@ericslaw Sim, isso parece ser o caso. tar preservará as datas dos arquivos, a menos que você use o -m bandeira. Então, o primeiro método não funcionará como regra geral.
Annika Backstrom
2

Outra alternativa com encontrar:

$ find "/path/to_clean/" -type f -mtime +30 -print0 | xargs -0 rm -f

onde o +30 é o número de dias que você deseja manter.

Chris_K
fonte