Esta é a abordagem que eu tentaria no Linux. Não tenho experiência com o Google Filestream, o Google Drive nem o Synology CloudSync, por isso não sei dizer se a solução pode ser aplicada. Ainda espero que isso, pelo menos, lhe dê algumas ideias.
Suposições
- você pode montar o compartilhamento em sua árvore de diretórios, portanto,
mv
,cp
e outras ferramentas sãs podem trabalhar com diretórios como se fossem locais; - arquivos (ou diretórios) com caminhos que se tornam idênticos depois que você remove todas as cadeias
(N)
são, na verdade, instâncias do mesmo arquivo (diretório); - instâncias do mesmo arquivo devem deixar apenas um arquivo;
- instâncias do mesmo diretório devem mesclar seu conteúdo em um único diretório;
- você pode usar todas as ferramentas que eu uso aqui.
Procedimento
Por favor, leia a resposta completa antes de tentar fazer qualquer coisa.
Acho que algumas etapas podem ser escritas como um script, mas como a solução é altamente experimental , é melhor fazer isso manualmente, passo a passo, prestando atenção no que acontece.
-
Em um shell
cd
para o ponto de montagem e invoquefind . | vidir -
; usar um editor de texto de sua escolha, por exemplokate
, assim:find . | EDITOR=kate vidir
Isso abrirá o editor com uma lista de todos os objetos, cada um com seu próprio número na frente. Quando você altera o conteúdo, salva o arquivo (temporário) e fecha o editor, todas as alterações são aplicadas. Em geral, isso é o que você pode fazer:
- alterar caminhos para mover (renomear) arquivos ou diretórios;
- excluir linhas para remover arquivos ou diretórios;
- troque dois ou mais números para trocar arquivos (você não precisará dele).
Não salve o arquivo, a menos que tenha certeza de que o novo conteúdo descreve a árvore de diretórios que você deseja obter.
-
Copie o conteúdo do editor para outro arquivo. O objetivo é trabalhar com ele e colar o resultado (e salvá-lo) apenas quando tiver certeza de que está certo. As próximas etapas referem-se ao novo arquivo, a menos que seja explicitamente indicado de outra forma.
-
Use
sed
ou qualquer outra ferramenta para se livrar de todas as sequências(N)
(observe o espaço à esquerda). Neste ponto, você deve obter caminhos "limpos", muitos deles ocorrerão mais de uma vez (com números diferentes dados porvidir
). -
Use
sort -k 2
para classificar de acordo com esses caminhos. Graças a-s
, o primeiroAnalysis
ainda deve preceder o antigoAnalysis (1)
. -
Use
uniq -f 1
para eliminar caminhos duplicados. Agora, qualquer caminho deve ocorrer apenas uma vez. -
Verifique novamente a sanidade da estrutura de diretórios codificada no resultado.
-
Cole o resultado no editor original, salve o arquivo e saia do editor.
vidir
removerá objetos associados a números ausentes e moverá objetos associados a números restantes.
Teste
Primeiro, use esta solução para replicar a estrutura de diretórios:
cp -a --attributes-only /mountpoint/ /guinea_pig_dir/
e teste o procedimento nos arquivos vazios resultantes. Isso deve revelar problemas (se houver) e, esperamos, permitir melhorar o método.
Possíveis problemas
-
vidir
se recusa a trabalhar com alguns caracteres não padrão. -
Em geral, a ordem dos objetos é importante. Existem algumas armadilhas que geram objetos como
foo~
oufoo~1
,foo~2
quando há uma colisão comfoo
. Você vai "contratar" a sua árvore de diretórios de uma forma que não deve gerar colisões, ainda não investiguei todos os cenários possíveis. Eu realmente acho que você deve experimentar com/guinea_pig_dir/
e ver o que você recebe. Em caso de problemas talvez , um inteligentesort
entrefind
evidir
ajudará.