Mover arquivos para outro diretório que seja mais antigo que uma data

26

Estou procurando uma solução para mover arquivos que são antigos a partir de hoje. Minha partição de log está ficando cheia, mas não consigo removê-los. Eles são necessários por muito tempo. De qualquer forma, uma solução que tive foi:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

Isso funcionaria? Perguntando por causa do " -mtime 365 " isso moveria os arquivos que são antigos a partir de hoje para um novo local?

Obrigado!

    
por mYzk 08.05.2013 / 09:51

5 respostas

39

Você está quase certo. -mtime 365 serão todos os arquivos com exatamente 365 dias. Você quer os que têm 365 dias ou mais, o que significa adicionar + antes do número como este -mtime +365 .

Você também pode estar interessado no sinalizador -maxdepth 1 , que impede que você mova itens em sub-diretórios.

Se você quiser ter certeza de que está apenas movendo arquivos, não diretórios, adicione -type f à linha.

No final da linha, adicionamos \; para que find saiba que é o fim do comando que estamos executando.

Portanto, a linha deve ser:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

Para estar no lado seguro, comece apenas fazendo um ls -l ao invés de mv - dessa forma você pode checar com antecedência que você está pegando exatamente os arquivos que você quer, antes de re-rodá-lo com mv, como este :

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;
    
por 08.05.2013 / 10:02
3

Tenha cuidado ao usar as soluções acima, usei-as e acabei movendo todos os arquivos em todas as subpastas !!!!

Este comando move todos os arquivos no diretório / source e todas as subpastas no diretório de origem:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

Em vez disso, use a opção -maxdepth 1 somente para arquivos em / sourcedirectory

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
    
por 15.07.2015 / 01:19
0

Você pode usar este comando e especificar que você só encontra arquivos, não diretórios, e o arquivo tem mais de um ano

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;
    
por 08.05.2013 / 10:03
0

Você pode usar o comando abaixo com atime se os arquivos forem acessados frequentemente

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;
    
por 29.04.2015 / 20:38
0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to '-exec'

Correto seria remover a barra final de /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;
    
por 29.09.2018 / 19:39