Como posso criar um script para colocar arquivos mais antigos do que antes em sua própria pasta?

6

Estou executando um script desnecessariamente complexo, semelhante a este comando:

find /home/user/videos/*.avi -mtime +0 -exec mv -f {} "/home/nb/videos/1 day old" \;

E então eu corro o mesmo comando, mas desta vez, da pasta "1 dia de idade" para a pasta "2 dias de idade". E mais alguns comandos continuam repetindo todo o caminho até 7 dias de idade! Por isso, todos os dias, os arquivos da pasta anterior "X days old" passam para a pasta do dia seguinte.

Estou basicamente tentando organizar arquivos automaticamente, executando no cron, para mover arquivos com mais de X dias para a pasta correta. É ineficiente, mas preciso que isso aconteça. Existe alguma maneira mais fácil e eficiente?

Quando chegar à pasta de 7 dias, tenho o comando final que remove os arquivos com mais de 7 dias da última pasta.

    
por nLinked 10.12.2011 / 17:10

1 resposta

3

Eu uso (para uma situação semelhante) uma maneira não padrão: logrotate .

Isso fará o backup de todos os vídeos em /home/user/videos para o arquivo /home/nb/videos/backup/videos.tar (diariamente) e moverá automaticamente os antigos arquivos tar para ...1.tar , ...2.tar etc. Os backups com mais de 7 dias serão excluído.

Eu incluí mv /home/user/videos/*.avi /var/tmp para manter uma cópia dos vídeos, caso algo dê errado.

Para ativar esta configuração de logrotate, coloque um arquivo semelhante para isto no diretório /etc/logrotate.d :

/home/nb/videos/backup/videos.tar {
  rotate 7
  daily
  notifempty
  nocreate
  nocompress
  missingok

  postrotate
    if ls /home/user/videos/*.avi > /dev/null 2>&1; then
      tar cf /home/nb/videos/backup/videos.tar /home/user/videos/*.avi
      mv /home/user/videos/*.avi /var/tmp
    fi
  endscript
}

Para mais informações, consulte man logrotate .

    
por arrange 10.12.2011 / 18:31