Linux - transfere todos os arquivos modificados após uma data específica para um novo disco rígido

2

Recentemente, meu segundo disco rígido do semestre passado começou a falhar e fiquei incapaz de criar uma nova unidade. Eu ainda tinha o primeiro hd que falhou então nós fantasmamos esse drive mas agora eu preciso pegar todos os arquivos e coisas que mudaram desde a data do primeiro ghosting (primeiro hd falhado - > segundo hd falhado) no drive novo ( todos os arquivos em segundo falharam hd desde uma data - > terceiro trabalhando hd). Existe uma maneira fácil de script isso no terminal do Linux ou usar outro programa?

Procurei usar os seguintes comandos, mas eles não obtiveram êxito e falham depois que as primeiras pastas foram arquivadas:

find . -type f -mtime -58 |xargs tar --no-recursion -czvf allmodified.tgz

tar czvf allmodified.tgz 'find . -type f -mtime -58'

O código de busca funciona e localiza todos os arquivos na unidade que eu preciso, mas ainda não consigo encontrar uma maneira de fazê-los arquivar com estrutura de arquivos para que eu possa descompactar os arquivos na nova unidade (terceiro trabalhando hd) e eles serão preservados onde estavam nos últimos 2 meses.

Eu não sou o melhor em descrever meus problemas, então se você tiver confusão, faça perguntas e eu farei o meu melhor para respondê-las.

Qualquer sugestão ajuda, muito obrigado!

    
por Samuel Kane 15.11.2013 / 19:23

1 resposta

2

Eles provavelmente falharão porque você não salvaguardou o espaço em branco em nomes de arquivos no segundo exemplo. A invocação é um pouco diferente:

find . -type f -mtime -58 -print0 | tar -czvf allmodified.tar.gz --null -T -

Aqui, find envia os caminhos de arquivo terminados por NUL caracteres. Eles são canalizados para tar , que lê a entrada de stdin ( -T - ) delimitada por nulo ( --null ). O --no-recursion não é necessário, pois você não incluirá os próprios diretórios no seu tarball.

Veja também: GNU tar 1.27: 6.3 Lendo nomes de um arquivo

Você poderia, então, extrair o arquivo do mesmo diretório que você pegou e colocar os arquivos nos diretórios aos quais eles pertencem. Observe que tar sobrescreve os arquivos existentes após a extração. Para evitar isso, use a opção --skip-old-files .

Quanto ao segundo exemplo, ele falhará se um arquivo ou caminho contiver espaço em branco, porque tar vê os dois arquivos foo bar e baz (que find outputs) como três, ou seja, tar foo bar baz . A maneira apropriada de lidar com isso é canalizar a saída de find com -print0 para o próximo comando, se esse comando tiver uma opção para ler a partir da entrada NUL -delimited (que a maioria dos utilitários GNU faz).

    
por 15.11.2013 / 19:46