Introdução
Uma equipe de conservação está mudando Garden Atlas para uma nova mesa. A origem contém rascunhos privados e prévias temporárias; o destinatário já tem uma nota que não pode ser perdida. Seu resultado será uma coleção e uma lista utilizáveis, primeiro para hoje e depois para uma edição revisada.
Você precisa de familiaridade básica com o terminal. Este ambiente independente fornece duas pastas locais e um retrato da próxima edição. Você aprenderá direção, barras finais, simulações, filtros e escopo preciso de exclusão antes de aplicar as mesmas ideias por SSH no próximo laboratório.
Ensaiar os limites da coleção
Nesta etapa, você copiará a coleção de livros para a pasta receptora depois de comparar duas simulações seguras. Use Terminal durante todo o laboratório. SSH não é necessário aqui.
A mesa de conservação está mudando Garden Atlas. old/collection contém textos, uma configuração de leitura oculta e um leitor executável. old/generated contém listas descartáveis da mesa. old/personal é privado. A nova mesa já tem receiver-note.txt, que pertence à equipe receptora e deve sobreviver a cada atualização. revision/ contém a próxima edição fornecida para uso posterior.
cd muda de diretório. ls -a inclui entradas ocultas; cat lê texto sem editar. Comece consultando a nota da equipe receptora:
cd /home/labex/project/folder-move
ls -a old/collection
cat new/receiver-note.txt
A nota diz Received by Mira. Keep the west shelf clear. O catálogo antigo já presente está incompleto. O destino não está vazio de propósito.
rsync copia do primeiro caminho para o segundo. -a significa modo de arquivamento: copia diretórios recursivamente e preserva horários de modificação, permissões executáveis e outros atributos suportados. Uma conta receptora normal não pode preservar donos arbitrários da origem; este curso verifica bytes e permissão de execução, não propriedade entre sistemas, ACLs ou atributos estendidos. -n faz uma simulação sem alterar arquivos. -i lista as mudanças propostas item por item.
A exclusão entre aspas descarta nomes terminados em .tmp em qualquer profundidade; as aspas impedem o shell de expandir o padrão antes que rsync o receba.
Primeiro simule o próprio diretório de origem, sem barra final:
rsync -ani --exclude='*.tmp' old/collection new/collection/
Procure um collection/ adicional proposto dentro da coleção de destino. Esse aninhamento colocaria o leitor no lugar errado.
Agora simule o conteúdo da origem com barra final:
rsync -ani --exclude='*.tmp' old/collection/ new/collection/
Agora os caminhos ficam diretamente sob new/collection/, incluindo .bindery.conf, read-book e texts/. Arquivos iniciados por ponto são incluídos porque rsync recebe o próprio diretório; um curinga do shell como old/collection/* omitiria entradas ocultas. Arquivos comuns novos geralmente mostram >f+++++++++; outras marcas descrevem atributos alterados. As linhas da simulação são propostas, não uma coleção entregue.
Remova somente n para executar a transferência escolhida:
rsync -ai --exclude='*.tmp' old/collection/ new/collection/
new/collection/read-book
O leitor mostra reading_order=catalog,treatment, seguido do catálogo de Garden Atlas e do tratamento com dobradiças de papel. A execução direta demonstra que o leitor copiado funciona com seus caminhos relativos de texto e sua configuração oculta. Se a execução for negada, examine os modos de origem e destino com ls -l e repita o modo de arquivamento a partir da origem preparada. Não substitua o leitor por saída fixa.
Se executou a cópia aninhada por engano, examine ls new/collection/collection antes de remover apenas esse duplicado com rm -r new/collection/collection. rm -r remove permanentemente o diretório indicado e seu conteúdo. Nunca encurte essa limpeza para new, que também contém a nota receptora. Depois repita a transferência correta.
Entregar a lista da mesa sem apagar notas
Nesta etapa, você concluirá a primeira entrega copiando a lista gerada separada. Permaneça em Terminal, em /home/labex/project/folder-move.
A coleção e os arquivos gerados têm responsabilidades diferentes. A origem gerencia cada arquivo sob generated/; o destinatário é dono da nota na raiz. Selecione apenas o segundo diretório gerenciado em vez de copiar todo old/, o que também divulgaria personal/.
rsync -ani old/generated/ new/generated/
rsync -ai old/generated/ new/generated/
cat new/generated/current.txt
cat new/receiver-note.txt
A lista diz Garden Atlas | desk edition 1. A lista obsoleta ainda faz parte intencionalmente da edição 1. A nota receptora não mudou. Execute novamente o leitor entregue:
new/collection/read-book
Não foi necessário --delete. Por padrão, rsync mantém arquivos exclusivos do destino. Uma exclusão impede a transferência; não remove um temporário já presente. Se copiou uma prévia por engano, examine e remova somente o arquivo indesejado exato, como rm new/collection/preview.tmp; depois repita a sincronização filtrada. Nunca limpe a raiz receptora para passar na verificação.
Aplicar a próxima edição dentro do escopo gerenciado
Nesta etapa, você entregará uma segunda edição e retirará somente a lista gerada antiga. Permaneça em Terminal, no mesmo espaço de trabalho.
cat aceita vários nomes de arquivo e os mostra nessa ordem. Leia a próxima edição fornecida antes de substituir a origem editável:
cat revision/collection/texts/catalog.txt revision/collection/texts/treatment.txt revision/collection/texts/addendum.txt
O catálogo agora tem 48 folhas, o tratamento usa dobradiças de linho e há um adendo novo. cp -a copia recursivamente preservando os atributos. revision/. significa todo o conteúdo, incluindo arquivos ocultos. Isso sobrepõe as alterações fornecidas a old/, mas não remove uma entrada ausente da revisão. A mesa aposenta explicitamente old/generated/obsolete.txt; remova apenas esse arquivo de origem nomeado. rm apaga um arquivo permanentemente; não amplie o caminho.
cp -a revision/. old/
rm old/generated/obsolete.txt
Normalmente rsync decide se os dados mudaram pelo tamanho e horário de modificação. -c acrescenta uma comparação do conteúdo por soma de verificação. Esses arquivos pequenos limitam o custo e permitem detectar mudanças de tamanho igual com horários preservados. Isso não cria histórico de versões nem backup. Simule e aplique a atualização da coleção:
rsync -anci --exclude='*.tmp' old/collection/ new/collection/
rsync -aci --exclude='*.tmp' old/collection/ new/collection/
A simulação da coleção deve mostrar os dois textos revisados e o novo adendo, sem prévias temporárias. Também podem aparecer alterações apenas de atributos.
--delete remove entradas do destino ausentes da origem dentro do diretório de sincronização escolhido. Aqui somente generated/ é totalmente gerenciado; a raiz receptora não é. Simule a retirada, procure *deleting obsolete.txt e aplique exatamente o mesmo escopo:
rsync -anci --delete old/generated/ new/generated/
rsync -aci --delete old/generated/ new/generated/
cat new/generated/current.txt new/collection/texts/addendum.txt new/receiver-note.txt
new/collection/read-book
Você deve ler a edição 2 da mesa, a nova folha, a nota receptora original e a saída atualizada do leitor. Um espelhamento de toda a raiz com --delete poderia apagar a nota. Nunca o use para retirar essa única lista gerenciada.
Repita as mesmas simulações:
rsync -anci --exclude='*.tmp' old/collection/ new/collection/
rsync -anci --delete old/generated/ new/generated/
Não devem restar alterações de arquivos. Repetir é seguro dentro do escopo declarado, mas uma exclusão futura na origem ainda exige decidir deliberadamente qual diretório de destino é gerenciado. rsync sozinho não recupera a edição original; use um backup separado quando precisar de histórico.
Resumo
Você entregou uma coleção utilizável, preservou sua configuração oculta e as permissões do leitor, além da nota da mesa receptora. Uma segunda sincronização atualizou os arquivos gerenciados e removeu uma lista aposentada somente no escopo declarado. A sincronização tem direção; ela não oferece backup com histórico de versões nem mescla conflitos.



