Como copiar o conteúdo de uma pasta para outra pasta em um diretório diferente usando o terminal?

740

Estou tentando copiar o conteúdo de uma pasta para outra pasta em um diretório diferente usando o terminal.

Alguém seria capaz de me fornecer um exemplo da sintaxe da linha de comando necessária para conseguir isso?

pandisvezia
fonte

Respostas:

1116

Você pode copiar o conteúdo de uma pasta /sourcepara outra pasta existente /destcom o comando

cp -a /source/. /dest/

A -aopção é uma opção recursiva aprimorada, que preserva todos os atributos do arquivo e também preserva os links simbólicos.

O .final do caminho de origem é uma cpsintaxe específica que permite copiar todos os arquivos e pastas, inclusive os ocultos.

enzotib
fonte
@enzotib Estou tentando usar este comando para copiar o conteúdo de "Downloads / textext" para "~ / .config / inkscape / extensions /." Usando seu comando, digite "cp -a / Downloads / textext /. /~/.config/inkscape/extensions/." mas isso não funciona
Funzies
@Funzies: provavelmente seu comando deve ser:cp -a ~/Downloads/textext/. ~/.config/inkscape/extensions/
enzotib
Adicione -psinalizador para preservar as permissões e os carimbos de data e hora do arquivo. cp -ap /var/www/original.com/images/. /var/www/new.com/images/
Dylan Valade
3
@DylanValade: -ajá implica --preserve=all, é mais amplo que -p = --preserve=mode,ownership,timestamps.
enzotib
1
@BennyNeugebauer: scpé usado para copiar em uma rede (por ssh) e criptografa apenas o canal de comunicação, não os arquivos no sistema de arquivos de destino.
enzotib
129

Uma alternativa é rsync

rsync -r source/ destination

As vantagens do rsync são:

  1. Após a sincronização inicial, ele copiará apenas os arquivos que foram alterados.

  2. Você pode usá-lo em uma rede, conveniente para arquivos em $ HOME, especialmente arquivos de configuração.

Pantera
fonte
5
Eu acho que você não precisa do asterisco. rsync -r source/ destinationdeve ser o suficiente, não?
21715 Joschua
1
Este é mais apropriado: 'rsync -rtvp source / * destination'
shridutt kothari
-r não funciona para arquivos / pastas ocultos
Nam G VU
1
Isso não copiará arquivos ocultos, pois o bash se expande * apenas para arquivos não ocultos. A solução da @Joschua é mais segura.
Sauerburger 9/03
O rsync copiará o diretório inteiro, incluindo arquivos ocultos, se você usar o final / sem um *, portanto, rync source/ destobviamente as pessoas precisarão personalizar o comando rsync para funcionar como desejarem.
Panther
78

Digamos que você tenha uma pasta chamada folder1 no seu ~, dentro da pasta1 existe um arquivo chamado file1 e 2 pastas chamadas sub1 e sub2, cada uma com outros arquivos e pastas dentro deles.

Para copiar todo o conteúdo de ~/folder1para ~/new_folder1você usaria

cp -r ~/folder1/. ~/new_folder1

new_folder1conteria todos os arquivos e pastas de folder1.

cpé o comando para copiar usando um terminal, o -rtorna recursivamente (assim, o diretório atual + outros diretórios dentro da atual) ~/folder1é a pasta de origem, ~/new_folder1é a pasta de destino para os arquivos / pastas dentro da origem.

Bruno Pereira
fonte
5
ele não captura arquivos ocultos
Portablejim
1
Obrigado Bruno! Isso me ajudou a entender a sintaxe, embora eu tenha que mudar um pouco (removendo o sinal ~). Talvez porque a pasta de destino estivesse em / opt, que reside em outro sistema de arquivos. E obrigado Portablejim por se lembrar da coisa do arquivo oculto!
Pandisvezia
4
O período à direita é importante. Sem ele, às vezes, ele pode criar um novo subdiretório em ~/new_folder1/folder1vez de copiar o conteúdo.
wisbucky
1
Por que nãocp -r ~/folder1/* ~/new_folder1
Alex78191
@ Alex78191[root@ home]# mkdir food [root@ home]# cd food/ [root@ food]# mkdir .fruit [root@ food]# mkdir veggies [root@ food]# touch veggies/carrots [root@ food]# touch .fruit/apple [root@ food]# ls * carrots [root@ food]#
Bruno Pereira
14

Verifique este http://www.cyberciti.biz/faq/copy-folder-linux-command-line/ para obter mais informações sobre como copiar a pasta. Espero que isto ajude.

cp Command

cpé um comando do Linux para copiar arquivos e diretórios. A sintaxe é a seguinte:

cp source destination
cp dir1 dir2
cp -option  source destination
cp -option1 -option2  source destination

Neste exemplo, copie a /home/vivek/letterspasta e todos os seus arquivos para o /usb/backupdiretório:

cp -avr /home/vivek/letters /usb/backup

Onde,

-a : Preserve os atributos especificados, como diretório, modo de arquivo, propriedade, registro de data e hora, se possível, atributos adicionais: contexto, links, xattr, todos.

-v : Explique o que está sendo feito.

-r: Copie diretórios recursivamente. Exemplo

Copie uma pasta chamada / tmp / conf para / tmp / backup:

$ cp -avr /tmp/conf/ /tmp/backup
Dilip Rajkumar
fonte
3
Não é isso que a pergunta faz.
AStopher
(Usando -r com -a é redundante; em -a GNU cp é o mesmo que "-DR --preserve = all")
Cristoper
1
cp: as opções -R e -r podem não ser especificadas juntas.
IgorGanapolsky
4

Exemplo simples.

Copie o diretório dir_1 e seu conteúdo (_files_) no diretório dir_2 :

cp -r ./dir_1 ./dir_2
# or
cp -r ./dir_1/ ./dir_2/
# Results in: ./dir_2/dir_1/_files_

Copie o conteúdo (_files_) apenas de dir_1 no diretório dir_2 :

cp -r ./dir_1/. ./dir_2
# or
cp -r ./dir_1/. ./dir_2/
# Results in: ./dir_2/_files_*

_files_ é um espaço reservado para os arquivos reais localizados no diretório

Karl Morrison
fonte
2

Se houver duas pastas: (com permissão de gravação)

drwxr-xr-x 4 vimal vimal  4096 Sep  9 12:17 .
drwxr-xr-x 3 root  root   4096 Aug 18 14:35 ..
drwxrwxrwx 6 vimal vimal  4096 Sep  9 12:15 DATA
drwxrwxrwx 7 vimal vimal  4096 Sep  9 12:15 PORTAL

Se você estiver dentro da pasta PORTAL, na qual deseja copiar todo o conteúdo de outra pasta, diga DATA no mesmo nível.

vimal@vimal-D3H:/var/www/html/PORTAL$ cp -a ../DATA/. .

Você tem que notar 2 pontos. Último ponto diz copiar aqui na pasta atual

e

um seguinte / DATA /. diz que todo o conteúdo dentro da pasta DATA deve ser copiado e não a própria pasta DATA.

Se você remover este "" final. de / DATA /

a pasta DATA inteira será copiada dentro do PORTAL (de onde você está copiando).

vimal krishna
fonte