Contexto:
- Teste de recuperação do sistema Debian 12 após uma corrupção do sistema de arquivos btrfs (árvore de raízes) sem backup, mas acesso a todos (?) Os arquivos. Fiz uma cópia do sistema após a corrupção, parece tudo certo. Fiz uma nova instalação do Debian 12. A partir daqui, editei
rsync
o sistema, exceto/etc
. Para este último, editeirsync
apenas os arquivos ausentes. - Agora, tenho que atualizar de forma inteligente
/etc
. Quero usar ferramentasmeld
para tornar isso mais fácil. Mas não funciona como root. Então fiz cópias do anterior e do novo/etc
echown -R user:user
ambos de um DVD AO VIVO.
Quando meu novo etc
for atualizado, desejo restaurar a propriedade de arquivos/diretórios antes de substituir toda /etc
a nova instalação.
O assunto aqui não é a restauração do meu sistema, mas a restauração da propriedade de arquivos a partir de uma cópia da árvore que possui os mesmos arquivos e direitos de propriedade.
ls -l
fornece propriedade, mas não caminhos completos. find
fornece caminhos completos, mas não propriedade. Acabei encontrando esta solução:
find previous_etc -exec sh -c 'chown -v --reference=$0 "new_etc${0#previous_etc}"' {} \;
Então, esta é uma pergunta auto-respondida. Mas se você tiver outros métodos, estou curioso.
mtree
foi projetado exatamente para este caso de uso.Vamos supor que você tenha seus arquivos em
etc
:E você tem uma cópia dos arquivos, mas com propriedade e permissões incorretas em
etc.new
:No lado esquerdo deste canal,
-c
"criamos" uma especificação mtree para-p
"Path" etc., enquanto à direita, lemos essa especificação no stdin e a comparamos com a hierarquia de arquivos no caminho etc.new. Mtree nos diz que muitos arquivos "deveriam ser" (primeiro valor), mas na verdade são (segundo valor):No lado direito do canal, se adicionarmos o
-u
sinalizador "Atualizar", o mtree fará a alteração para que a propriedade e as permissões dos arquivosetc.new
sejam definidas para que correspondam aos arquivos de referência emetc
:E de fato,
find etc etc.new -ls
confirma que agora são idênticos: