Como posso recursivamente copiar um diretório para outro e substituir apenas os arquivos que não foram alterados?
-
03-07-2019 - |
Pergunta
Eu estou olhando para fazer uma cópia específica no Fedora.
Eu tenho duas pastas:
-
'webroot': realização de todos os arquivos da web / imagens etc
-
'exportação':. Pasta que contém milhares de PHP, CSS, documentos JS que são exportados do meu SVN repo
O diretório de exportação contém muitos dos mesmos arquivos / pastas que a raiz faz, no entanto, a raiz contém os adicionais não encontrados na exportação.
Eu gostaria de mesclar todas as conteúdo de exportação com a minha webroot com as seguintes opções:
- substituindo o arquivo no webroot se a versão de exportação contém código diferente do que está dentro da versão de webroot (live)
- Preservar as permissões / usuários / grupos do arquivo se ele será substituído (a exportação versão substituindo a versão ao vivo) * NOTA gostaria que o webroots permissões / propriedade mantido, mas com conteúdo de exportação
- Sem avisar / parar da cópia de qualquer tipo (ou seja, não detalhado) copiar
- recursiva - obviamente I gostaria de copiar todos os arquivos * pastas e subpastas encontrado em exportação
Eu fiz um pouco de investigação sobre cp - seria este fazer o trabalho ?:
cp -pruf ./export /path/to/webroot
Solução
Pode ser, mas a qualquer momento os arquivos correspondentes em export
e webroot
têm o mesmo conteúdo, mas diferentes tempos de modificação, você ia acabar realizando uma operação de cópia desnecessários. Você provavelmente terá um comportamento ligeiramente mais esperto do rsync
:
rsync -pr ./export /path/to/webroot
Além disso, rsync
pode copiar arquivos de um host para outro através de uma conexão SSH, se você tiver a necessidade de fazer isso. Além disso, tem uma opções zilhão você pode especificar para ajustar seu comportamento -. Olhada na página man para mais detalhes
Editar : em relação ao seu esclarecimento sobre o que você quer dizer com preservando permissões:. Você provavelmente iria querer deixar de fora a opção -p
Outras dicas
- -u substitui arquivos existentes pasta se o destino é mais velho do que fonte
- perserves -p a permissão e as datas
- voltas -f fora verbosidade
- -r torna a cópia recursiva
Assim, parece que você tem todos os argumentos corretos para cp
soa como um trabalho para cpio
(e, portanto, provavelmente, GNU tar pode fazer isso também):
cd export
find . -print | cpio -pvdm /path/to/webroot
Se precisar proprietários preservadas, você tem que fazê-lo como root, é claro. A opção -p
é 'modo pass', ou seja, cópia entre locais; -v
é verboso (mas não interativa; há uma diferença); meios -d
criar diretórios como necessário; meios -m
preservar o tempo de modificação. Por padrão, sem a opção -u
, cpio
vai arquivos não substituir na área alvo que são mais recentes do que a da área de origem.