Tutoriel Linux

Copiar uma pasta Linux com arquivos ocultos e permissões

Débutant3 min de lecture

Copiar um diretório parece 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 é frequentemente a melhor escolha para duplicar um diretório 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ê apontou para o caminho correto.

Cópia segura de dois diretórios em armazenamentos Linux
Primeiro copie, depois verifique os arquivos, permissões 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 incluídas ao copiar o diretório em si. 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 o máximo 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 priorizado. Ele pode exigir permissões elevadas 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 esse diretório já existir, verifique a estrutura obtida antes de continuar.

Preparar um destino sem sobrescrever o diretório errado

Primeiro, crie um destino claramente nomeado e 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, e então mude o serviço para a cópia validada.

Controlar arquivos, permissões e links

Comece verificando os arquivos ocultos e as permissões. 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

O último comando lista os links simbólicos. Com cp -a, um link normalmente continua sendo 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 o deslocamento.

  • 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 árvores de diretórios, diff -qr /srv/app /srv/app-copie reporta os arquivos que diferem. Isso não substitui uma validação de aplicativo, 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 lançado muito rapidamente pode quebrar executáveis. Para encontrar um arquivo antes da cópia, use também find no Linux.

sudo apt update && sudo apt upgrade