Tutoriel Linux

Copiar um diretório Linux com arquivos ocultos e permissões

Débutant3 min de lecture

Copiar uma pasta pode parecer banal até o dia em que o diretório contém arquivos ocultos, links simbólicos ou datas úteis para um script. cp -r copia a estrutura, mas cp -a é muitas vezes a melhor escolha para duplicar uma pasta de trabalho sem modificar seus atributos.

Antes de excluir a fonte, crie a cópia, verifique-a e abra alguns arquivos. Um comando bem-sucedido não prova que você seguiu o caminho correto.

Cópia segura de duas pastas em armazenamento Linux
Copie primeiro, verifique depois os arquivos, direitos e links.

Escolher entre cp -r e cp -a

cp -r desce nos subdiretórios. As entradas que começam com um ponto são bem incluídas ao copiar a própria pasta. Evite, no entanto, globbing do tipo * se você também espera os arquivos ocultos: o shell os ignora por padrão.

cp -a ativa o modo de arquivo. Ele preserva, na medida do possível, as permissões, proprietários, datas, links simbólicos e links físicos. Para um backup local ou uma migração de diretório, geralmente é o comando a ser privilegiado. Ele pode exigir direitos elevados se você precisar preservar um proprietário que sua conta não pode definir.

cp -a -- /srv/app/ /srv/app-copie/

O -- separa as opções dos caminhos. Ele evita que um arquivo começando com um hífen seja interpretado como uma opção. A barra final da fonte significa aqui que você está copiando seu conteúdo para /srv/app-copie/. Se essa pasta já existir, verifique a estrutura obtida antes de continuar.

Preparar um destino sem sobrescrever a pasta errada

Crie primeiro um destino claramente nomeado, depois liste os dois lados. Em um servidor, não inicie uma cópia recursiva para um caminho construído manualmente em um script sem exibir esse caminho nos logs.

mkdir -p -- /srv/app-copie
find /srv/app -maxdepth 1 -printf '%fn' | sort
find /srv/app-copie -maxdepth 1 -printf '%fn' | sort

Se você quiser recusar qualquer sobrescrição durante uma primeira tentativa, adicione -n. Esta opção ignora os arquivos já presentes, portanto, não é adequada para uma sincronização completa. Para substituir dados existentes, faça um backup ou trabalhe em um novo diretório, depois mude o serviço para a cópia validada.

Verificar arquivos, direitos e links

Comece verificando os arquivos ocultos e os direitos. ls -la exibe os nomes que começam com um ponto. stat permite comparar as permissões e as datas de um arquivo sensível.

ls -la /srv/app
ls -la /srv/app-copie
stat -c '%n %a %U:%G %y' /srv/app/config.ini /srv/app-copie/config.ini
find /srv/app-copie -type l -ls

A última comando lista os links simbólicos. Com cp -a, um link normalmente permanece um link. Com uma cópia menos adequada, você pode acabar com o conteúdo de seu alvo ou um link se tornando inválido após a movimentação.

  • conte os arquivos com find ... -type f | wc -l ;
  • abra o arquivo de configuração mais importante ;
  • teste o programa contra a cópia antes de excluir a fonte ;
  • mantenha a fonte enquanto o serviço ou o script não tiver passado por seu controle funcional.

Para comparar o conteúdo de duas estruturas, diff -qr /srv/app /srv/app-copie sinaliza os arquivos que diferem. Ele não substitui uma validação aplicativa, mas detecta rapidamente uma cópia incompleta.

Se você também precisar corrigir as permissões após uma duplicação, o guia sobre chmod recursivo no Linux explica por que um chmod -R executado muito rapidamente pode quebrar executáveis. Para encontrar um arquivo antes da cópia, use também find no Linux.