No Linux Fedora, Como posso selecionar arquivos para mover por intervalo de tempo

4

Como posso selecionar e mover arquivos que foram gravados em um intervalo de tempo especificado, como 1530 a 1730, horário local, em uma data recente?

Antecedentes: Eu uso o Linux Fedora 12, e fiz meu primeiro, e há muito atrasado, backup do meu diretório home para um disco rígido externo preparatório para atualizar para a versão mais recente do Fedora, em um novo computador, usando rsync . Infelizmente, embora eu tenha feito várias sequencias para verificar se funcionaria corretamente, não entendi a especificação do arquivo de destino e agora tenho todos os meus arquivos de backup (60000 arquivos em 32Gb) misturados com o conteúdo do disco original em vez de diretório separado. Por isso, gostaria de selecionar todos os arquivos salvos durante a hora que o backup levou e movê-los para outro diretório.

    
por Harry Weston 05.02.2014 / 20:20

2 respostas

3

Como sugerido por Stephane Chazelas , você pode usar find e verificar ctime .

Supondo que o backup foi iniciado há 200 minutos e encerrado há 100 minutos, ele encontrará qualquer coisa com um ctime nesse intervalo:

find -cmin -200 -cmin +100

Faça o seu dry-runs e, se ficar bem, construa sua restauração com base nisso.

Atualização:

Um ponto de partida geral para mover seus arquivos pode ser semelhante a (remova echo to mv para real):

find source --mindepth 1 -cmin -200 -cmin +100 -exec echo mv -v "{}" target \;

em que --mindepth 1 ajuda a evitar que source seja movido (nesse caso, você poderia apenas mv source target ) e "{}" torna mv trabalho para nomes de caminho contendo espaços. Isso deve abranger casos normais, a menos que você tenha nomes de caminho contendo novas linhas ou outros caracteres incomuns.

Você pode preferir mover os diretórios primeiro, para evitar avisos de find quando não puder pesquisar nos subdiretórios que acabou de mover. -type d :

find source -type d --mindepth 1 -cmin -200 -cmin +100 -exec echo mv -v "{}" target \;

Como sempre: executar a seco ( echo ) primeiro para simular o que aconteceria. Aqui está um similar discussão do Stack Overflow

    
por 05.02.2014 / 21:08
4

Como @grebneke sugeriu, seguindo o comando com ajuda para mover arquivos

find . ! -path . -cmin -200  -cmin +100 -exec echo mv -v {} /tmp/  \;

Isso também é executado a seco, porque usamos echo , se a saída parece boa, então você pode remover o eco e mover os arquivos.

encontre a explicação do comando

  • . onde procurar
  • ! -path . exclui o diretório atual
  • -cmin -200 200 minutos atrás
  • -cmin +100 há 100 minutos
  • -exec comando de execução
  • { } A string {} substituída pelo nome do arquivo de correspondências
  • \; Precisa estar lá, pois indica o fim dos argumentos fornecidos para -exec variable
por 06.02.2014 / 03:56