Em primeiro lugar, sei que não é possível criar hardlinks de uma pasta.
Eu queria saber se havia algum comando (linux) que pudesse criar automaticamente (e recursivamente) a árvore de pastas subsequente no destino e, em seguida, vincular todos os arquivos da origem ao destino automaticamente.
Responder1
Não tenho certeza do que você quer dizer com "vincule todos os arquivos da origem ao destino automaticamente". E você deseja explicitamente recursão.
Se você deseja que os dois locais permaneçam "sincronizados", por exemplo, a remoção ou criação de um arquivo deve ser observada em ambos ao mesmo tempo, então vincule a montagem (esta outra resposta) é bom. Observe que a solução não deixa rastros no sistema de arquivos. Se você criar um hardlink, ele será criado no sistema de arquivos. Mova o disco e monte o sistema de arquivos em outro sistema operacional e o hardlink ainda estará lá. Reinicie e o hardlink ainda estará lá. As montagens de ligação estão no nível do sistema operacional. Você não apenas precisaria comandar separadamente o outro sistema operacional para vincular a montagem depois de mover e montar o disco. Se você não mover o disco, ainda precisará informar ao sistema operacional atual para vincular a montagemde novodepois de reiniciar (se a solução permanente for o que você deseja).
Um link simbólico para um diretório é um tanto semelhante e existe no sistema de arquivos.
ln -s /original /other
Se o link simbólico e seu destino pertencerem ao mesmo sistema de arquivos e o link simbólico forrelativo, funcionará mesmo se o sistema de arquivos for montado em outro lugar (ponto de montagem diferente, possivelmente em sistema operacional diferente). Existem razões pelas quais um link simbólico pode não ser o que você deseja (exemplo).
Observe que a montagem vinculada ou link simbólico não é realmente recursiva. É umsolteiroato que “liga” dois caminhos. Não faz nada para caminhos mais profundos. Sua (semi-)equivalência surge porque há algum tipo de ligação entre os respectivos "diretórios" pais ((((…)grande-)grande-)grande)pai.
Agora, se por "vincular todos os arquivos da origem ao destino automaticamente" você quer dizer "fazer isso automaticamente, mas uma vez", então você pode fazer isso com cp
:
cp -lR /original /other
( -l
embora não seja exigido pelo POSIX). É como, cp -R
mas com hardlinks. Isso é realmente recursivo. Mas também é uma ação única. As subárvores do diretório são separadas, apenas os arquivos regulares aparecem com link físico. A criação ou exclusão de arquivos não será espelhada.Ações que quebram hardlinksquebrará hardlinks.
Responder2
Será que ummontar montagemser uma solução melhor? Ele faz exatamente o que você deseja, que é fazer com que todos os arquivos sejam iguais recursivamente em dois caminhos diferentes.
Este comando faz com que /other
tenha o mesmo conteúdo da montagem ou diretório existente /original
:
mount --bind /original /other
Quaisquer alterações feitas em um /original
ou /other
aparecerão imediatamente no outro porque os dois caminhos agora são ponteiros para a mesma montagem.