Em vez de cp
, prefiro usar tar
para a árvore grande ..
Sim, eu uso quase nunca cp -r
syntaxe (exceto para backups hardlinking, com cp -al
, mas é muito específico).
A sintaxe do tar permite muitas configurações para copiar uma grande árvore, sobre o que pode ou não ser copiado (quais arquivos, permissões, proprietário ...) veja man tar
.
Eu prefiro estar familiarizado com o comando tar
:
No host local:
tar -cpC /path/to/source . | tar -xpC /path/to/target
(observe o ponto .
que especifica o que salvar ).
Estar familiarizado com tar
pode ser útil para cópia remota:
ssh user@remotesource tar -zcpC /path/to/source . | tar -zxpC /path/to/target
ou
tar -zcpC /path/to/source . | ssh user@targethost tar -zxpC /path/to/target
ou até mesmo
ssh user@remotesource tar -zcpC /path/to/source . |
ssh user@targethost tar -zxpC /path/to/target
Em hosts remotos e / ou diferentes, ao copiar a conta de usuários, você pode gostar de --numeric-owner
options ...
-
--one-file-system
fica no sistema de arquivos local -
--overwrite
sobrescrever arquivos existentes -
-T, --files-from FILE
obtém nomes para extrair ou criar de FILE -
-z
usa compactação gzip
Em vez de tar
, por que não usar cpio
Como imz - Ivan Zakharyaschev comentou, cpio
poderia fazer o mesmo, mas não com a mesma sintaxe:
cpio
requer uma lista de inode (arquivo, dir, dev, soquete, fifo) que deve ser armazenado em archive para ser enviado por STDIN
.
Mas cpio
oferece um modo --pass-through
que permite copiar o arquivo para outro diretório.
Isso torna a sintaxe mais strong, mas à medida que usamos find
para criar essa lista, poderíamos usar o poder de find
para copiar exatamente o que precisamos:
cd /path/to/source
find . \( -type f -o -type d \) ! -name '*.foo' -print0 |
cpio --null -pvd /path/to/destination
Usado remotamente, você pode:
ssh user@remotesource /bin/sh <<<'cd /path/to/source;
find . \( -type f -o -type d \) ! -name '*.foo' -print0 |
cpio --null -o |
gzip' |
ssh user@targethost 'cd /path/to/destination && gunzip | cpio -id'