Tarefa Cron para mover diretórios com mais de 24 horas

0

Bem, o que eu quero fazer é

  1. O cron deve ser executado a cada hora ou mais
  2. Deve mover o diretórios em uma pasta / disk1 / data / mais antiga que 24 horas para / disk2 / data /
  3. Os diretórios movidos devem conter todos os dados (arquivos / pastas) dentro deles

Sou iniciante em tarefas agendadas, então não tenho a menor ideia de por onde começar. Obrigado por qualquer ajuda!

    
por yashau 03.08.2012 / 10:33

2 respostas

1

O que exatamente você quer dizer com a idade de um diretório? Tempo desde a criação de seu inode? Eu sugiro que você use find para identificar os diretórios que você deseja mover. Por exemplo. assim:

#!/bin/bash
res=0
cd /disk1/data/
find -type d -ctime +1 -print0 -prune | \
while IFS= read -r -d '' i; do
    if [[ ${i} == */* ]]; then                    # need to ensure subdir exists
        if ! mkdir -p "/disk2/data/${i%/*}; then  # error creating dir?
            res=1
            continue
        fi
    fi
    rm -rf "/disk2/data/${i}"                     # make sure target does not exist
    mv "${i}" "/disk2/data/${i}"                  # move stuff
done
exit ${res}

Se outras pessoas pudessem escrever disk2 , então este código poderia ser vulnerável a alguns tipos de ataques de links simbólicos se alguém criasse os links simbólicos certos rápido o suficiente. Não tenho certeza.

Eu sugiro que você escreva o script em algum arquivo e o execute a partir do cronjob. Você cria um conjob com crontab -e (verifique se definiu sua variável de ambiente EDITOR apropriadamente), seguindo o formato descrito em man crontab .

    
por 03.08.2012 / 11:31
0

Observe que a opção -ctime de find não significa criação tempo, mas "inode mudança tempo". O campo st_ctime é alterado escrevendo ou definindo informações de inode (proprietário, grupo, contagem de links, modo, etc.). Para diretórios, ele também refletirá a última vez que um arquivo (ou subdiretório) foi criado ou excluído nesse diretório. Então, considere se find -type d -ctime +1 é realmente a opção que você precisa.

    
por 13.05.2015 / 12:03