Estou tentando copiar uma árvore de diretórios preservando recursivamente os hardlinks para o arquivo. Usando o gnu cp, isso funcionaria com o sinalizador -l. O cp recriaria a estrutura de diretórios, mas não precisaria copiar o conteúdo de cada arquivo.
Isso é preliminar para um backup. Primeiro, quero fazer uma cópia barata (com vínculo direto) do backup anterior e depois sincronizar novamente o diretório de origem nessa cópia. Aproximadamente:
cp -r -l yesterdays_backup todays_backup
rsync -a source_dir todays_backup
Infelizmente, o cp do OSX não suporta o sinalizador -l, até onde eu sei, o cpio não suporta cópias recursivas. A outra alternativa é pax, mas isso leva a que toda a estrutura de diretórios seja copiada:
pax -rw backups/yesterdays_backup backups/todays_backup
transforma:
yesterdays_backup
|
\source_dir (...)
para:
todays_backup
|
\backups
\yesterdays_backup
\source_dir(...)
Deve haver uma maneira fácil / óbvia de fazer isso, mas atualmente estou perplexo ... Alguma alternativa para cpio e pax? Eu gostaria de evitar a instalação do gnu cp.
Estou ciente do Timemachine, mas isso não fará o backup adequado dos diretórios criptografados de forma incremental.
Respostas:
É fácil o suficiente instalar o cp a partir do MacPorts; no entanto, se você não quiser, ou deseja criar um script portátil, você tem três opções:
rsync
cpio
pax
fonte
É fácil instalar o
coreutils
pacote do MacPorts que contém ocp
comando GNU renomeado paragcp
.Porém, melhor ainda, as versões mais recentes do rsync, incluindo a do OS X 10.5, pelo menos, suportam a opção --link-dest, que deve eliminar a necessidade do cp -al inicial. Veja aqui . Também é uma boa prática usar a opção -E para copiar atributos estendidos, ACLs etc.
fonte
Embora
cpio
não ofereça suporte direto à cópia recursiva, você pode alimentar a lista exata de arquivos que deseja copiar em sua entrada padrão e obter o efeito de uma cópia recursiva usando afind
canalizaçãocpio
. Isso é diretamente análogo ao uso do GNUtar
com as opções-T -
(o que significa ler a lista de arquivos para fazer backup da entrada padrão).fonte
Acredito que o que você deseja também pode ser alcançado
ditto yesterdays_backup todays_backup
. Por padrão,ditto
faz uma cópia recursiva que preserva links físicos, ACLs e atributos estendidos.fonte
+1 para a resposta de Pauls. ditto seria uma opção, mas somente se usado em conjunto com o find - preserva os links físicos, mas apenas dentro dos diretórios.
fonte