Como posso converter um link físico em um arquivo normal?

Como posso converter um link físico em um arquivo normal?

Sei que todo arquivo é um link físico. Isso é exatamente o que quero dizer: se um inode tiver mais de um arquivo apontando para ele, como posso copiar o inode para que cada arquivo aponte para um inode separado com o mesmo conteúdo?

Por exemplo:

echo "Example" > one
ln one two

Como posso fazer com que o arquivo twotenha o mesmo conteúdo one, sem compartilhar um inode? Gostaria de "reduplicar", se quiser, os arquivos.

Responder1

Isso pode ser conseguido com o comando

find -samefile filename -exec sed -i ';;' {} \;

ou se você agora o número do inode do arquivo

find -inum inode -exec sed -i ';;' {} \;

Observe que ambos os comandos encontram apenas os arquivos com inodes correspondentes nos subdiretórios do diretório de trabalho atual. Se precisar pesquisar todos os arquivos em seu sistema de arquivos, você precisará executar este comando no diretório raiz.

A primeira parte find -samefile filenameencontra todos os arquivos que compartilham o mesmo inode. Em seguida, ele executa sed -i ';;'o que copia o arquivo para um arquivo com o mesmo nome (observe que usamos o script sed ';;'em vez de ';', caso contrário, findinterpretará o argumento ;como o final do -execcomando).

informação relacionada