Não use find
para isso. A maneira como você for com find
precisará de algo como um único mv
por arquivo. Isso é um monte de processos e sem nenhum benefício. Isso sem mencionar que é simplesmente mais difícil fazer isso. Essa é a minha opinião, de qualquer maneira.
Eu usaria um stream ou uma ferramenta em lote e tenderia a preferir pax
:
cd -P . && mkdir ../newmp4 &&
pax -rwls'|?|_|g' . "${PWD%/*}/newmp4"
Se você puder criar o diretório ../newmp4
, esse pequeno script espelhará a árvore com raiz em .
para o diretório recém-criado com hardlinks, mas substituirá cada ?
que ocorre em qualquer nome de arquivo por um sublinhado no enquanto isso.
Uma vantagem para isso é que as árvores ambas continuam a existir depois - nenhuma das pastas raiz do diretório atual são afetadas - elas são alteradas apenas na versão espelhada da árvore. E assim você pode inspecionar os resultados depois de decidir qual versão da árvore remover. Se alguma coisa der errado durante a operação - não há mal nenhum.
Isso requer, no entanto, um fs que suporte hardlinks e que tenha pelo menos o mesmo número de inodes livres restantes, pois há diretórios filhos de .
+2 e assume que ..
.
e todos os filhos de .
compartilha a mesma montagem do sistema de arquivos.
Praticamente o mesmo efeito pode ser obtido com rsync
, eu acho, embora eu não acredite que seja simplesmente feito. Se você não tem pax
(mesmo se você realmente deveria ) , você pode simplesmente obter isto. mirabilos mantém o (que eu saiba) mais versão comumente usada nos sistemas linux.