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-systemfica no sistema de arquivos local -
--overwritesobrescrever arquivos existentes -
-T, --files-from FILEobtém nomes para extrair ou criar de FILE -
-zusa 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'