Primeiro, reconstrua a árvore de diretórios da origem no destino:
cd source
find -type d -exec mkdir -p destination/{} \;
O {}
no find
deve conter o caminho relativo de cada diretório.
Em seguida, verifique se a árvore de diretórios que você criou no destino parece boa. E tente mover cada arquivo individualmente:
cd source
find -type f -exec mv {} destination/{} \;
Eu não posso dizer o quanto isso é potencialmente perigoso. Você pode perder dados! Não tenho certeza do que o find
fará se não puder stat
de um arquivo. Minha esperança é que ele apenas emita um erro de mensagem e siga em frente. Mas como aparentemente você está tentando recuperar dados de um meio de dano, provavelmente está ciente de quaisquer riscos.
Se isso funcionar como pretendido, tudo o que será deixado na origem são os diretórios e os arquivos que não puderam ser movidos. Se você quiser, você pode pesquisar em SO como remover os diretórios vazios de forma recursiva (tenho 100% de certeza que isso foi perguntado antes) para facilitar sua análise.
Eu sugiro que você faça um pequeno caso de teste no meio danificado. mkdir
alguns diretórios, touch
alguns arquivos aleatórios e tente estas etapas para ver o que acontece. Também provavelmente é uma boa idéia se você fizer isso em um diretório por vez, em vez de fazê-lo na raiz.
O que eu quero dizer é, se o seu strucutre é, por exemplo:
.
├── dir1
│ ├── fileA
│ └── subdir1
│ └── fileB
├── dir2
│ └── fileC
└── dir3
├── subdir1
│ └── fileD
└── subdir2
└── fileE
Em seguida, execute-o 3 vezes; uma vez em dir1
, se tudo correr bem, mova para dir2
e dir3
, em vez de fazer tudo de uma só vez em .
.