como você copia um diretório e seu conteúdo para um novo local sob um novo nome de diretório?

14

Sou novo na linha de comando do Linux e estou tentando lidar com o comando copy no momento.

Alguém pode, por favor, me dizer se é possível copiar um diretório com seus subdiretórios e arquivos associados para um novo diretório com um novo nome? directory_backup?

Obrigado por toda e qualquer ajuda antecipadamente

    
por Edmuntu 02.11.2016 / 23:04

7 respostas

24

Você usa -r (copiar recursivamente) e especificar o novo nome

cp -r /path/to/directory /path/to/location/new-name

substitua pelos caminhos reais ... por exemplo, para copiar stuff do meu diretório home para um diretório existente backup e nomear o novo diretório stuff-backup (se esse diretório já existir , observe que stuff será copiado para , não sobrescrevê-lo).

cp -r ~/stuff ~/backup/stuff-backup

~ é um atalho para o seu diretório pessoal /home/$USER ou /home/zanna no meu caso. Você pode omiti-lo se o diretório de trabalho atual for o seu diretório pessoal - você pode ver isso no seu prompt

zanna@monster:~$
              ^--the ~ here is where I am - home!

Você pode adicionar o sinalizador -v verbose para que cp informe cada cópia sendo executada ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
    
por Zanna 02.11.2016 / 23:15
7

O comando que você precisa é simplesmente cp , que significa "copiar".

Você pode usá-lo, por exemplo, com uma destas sintaxes:

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

A primeira variante permite que você especifique um novo nome de arquivo para o arquivo de destino, enquanto a segunda variante cria uma cópia com o mesmo nome no diretório de destino. É claro que você deve primeiro substituir os locais em letras maiúsculas por caminhos válidos.

No entanto, cp , por padrão, opera somente em arquivos, não em diretórios. Para conseguir copiar um diretório completo com todo o seu conteúdo de forma recursiva, você deve adicionar a opção -r :

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Você pode aprender mais sobre o comando cp digitando man cp no seu terminal.

    
por Byte Commander 02.11.2016 / 23:15
6

Como alternativa ao comando cp geralmente útil, você pode usar o rsync, que tem o benefício adicional de replicar as permissões / registros de data e hora da estrutura de diretórios original:

rsync -av dir/ newdir

-a arquivo -v verbose

observe a barra após o diretório de origem.

    
por siloko 03.11.2016 / 08:26
4

Acho mais fácil mudar para o diretório do qual estou copiando primeiro. Para este exemplo, mude para um diretório que todos chamam de /boot . Qualquer um pode copiar e colar os comandos abaixo em seu Terminal.

cd /boot
sudo mkdir /boot_backup
sudo cp -r . /boot_backup
du /boot_backup -h

752K    /boot_backup/extlinux/themes/debian-wheezy
756K    /boot_backup/extlinux/themes
832K    /boot_backup/extlinux
2.5M    /boot_backup/grub/i386-pc
20K     /boot_backup/grub/locale
2.3M    /boot_backup/grub/fonts
7.2M    /boot_backup/grub
565M    /boot_backup

Para o comando cp , o diretório atual é identificado como . , que é o diretório /boot para o qual alteramos. A opção -r faz com que seja recursiva incluir todos os subdiretórios.

Para garantir que funcionou, execute du para listar todos os subdiretórios e tamanhos totais de arquivos no novo diretório /boot_backup , neste caso.

Depois de terminar este passo a passo, use: sudo rm -r /boot_backup para remover o novo diretório e seus subdiretórios.

    
por WinEunuuchs2Unix 02.11.2016 / 23:34
3

Você pode usar o comando abaixo para copiar o diretório de um lugar para outro sub-diretório.

cp -Rvp /home/edmuntu/data /home/edmuntu/mydata/

Explicação do comando:

  • -R = copiar diretórios recursivamente
  • v = explica o que está sendo feito
  • p = Isso ajudará você a preservar sua permissão e propriedade com os timestamps
por Rakesh C 03.11.2016 / 13:50
3

cp é o comando que faz a função que você está procurando. Significa cópia e faz exatamente isso. O comando que funcionaria para você nessa situação é

cp -R source/ destination/

Isso copia a pasta source/ e todos os seus subdiretórios para destination/ .

Se destination/ não existir, ele será criado.

O sinal -R significa recursivo, que diz cp para copiar todos os subdiretórios.

    
por Owen Hines 02.11.2016 / 23:16
0

Você geralmente deseja manter as permissões de arquivo iguais ao fazer uma cópia, não um novo conjunto de permissões de criação padrão. Isso significa usar -a flag para cp.

cp -a file filenew
    
por Robi 08.11.2016 / 07:31