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

53

Eu sou novo na linha de comando do Linux e estou tentando entender o comando de cópia no momento.

Alguém pode 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, por exemplo, directory_backup?

Obrigado por toda e qualquer ajuda com antecedência

Edmuntu
fonte

Respostas:

71

Você usa -r(copia recursivamente) e especifica o novo nome

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

substituir com os caminhos reais ... por exemplo, para copiar stuffdo meu diretório home para um existente diretório backupe nomeie o novo diretório stuff-backup(se este diretório já existe, nota que stuffserá copiado para ele, e não substituí-lo).

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

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

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

Você pode adicionar o -vsinalizador detalhado para fazer o cprelatório de cada cópia sendo executada ...

$ cp -vr stuff backup/stuff-backup
'stuff/thing1' -> 'backup/stuff-backup/thing1'
'stuff/thing2' -> 'backup/stuff-backup/thing2
...
Zanna
fonte
Desculpe Zanna. Vou colocar seu conselho em prática e ver como vou. Como a idéia da bandeira detalhada. suponha que isso também funcionará como um relatório enquanto outro comando estiver sendo executado.
Edmuntu 3/11
@ Edmuntu desculpe pelo quê? Sim, muitas comandos têm um -vou --verbosebandeira :)
Zanna
desculpe pelo curto inicial "obrigado" .... pressione a tecla Enter com erro.
Edmuntu 3/11
10

O comando que você precisa é simplesmente o cpque significa "cópia".

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

cp SOURCEFILE TARGETFILE
cp SOURCEFILE TARGETDIRECTORY

A primeira variante permite especificar 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. Obviamente, você deve substituir primeiro os marcadores de posição em maiúsculas por caminhos válidos.

No entanto, cppor padrão, opera apenas em arquivos, não em diretórios. Para que ele copie um diretório completo com todo o seu conteúdo recursivamente, você deve adicionar a -ropção:

cp -r SOURCEDIRECTORY TARGETDIRECTORY

Você pode aprender mais sobre o cpcomando digitando man cpseu terminal.

Byte Commander
fonte
Não está acostumado a esta seção de comentários Byte Commander ... mantenha pressionado o retorno para alterar a linha, mas poste. Esboço muito claro na sua resposta. Ansiosos para resolver esses diretórios agora que recebi boas instruções sobre o uso correto das ferramentas disponíveis. Excelente.
Edmuntu 3/11
@ Edmuntu No futuro, use SHIFT + ENTER ao comentar para descer uma linha.
TheOdd 5/11
@OwenHines Apenas esses comentários eliminam qualquer quebra de linha e espaço em branco adicional e tê-los no editor não altera nada no resultado.
Byte Commander
@ByteCommander Oh certo, deixa pra lá. Bem, agora ele sabe.
TheOdd 5/11
6

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

rsync -av dir/ newdir

-um arquivo -v detalhado

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

slowko
fonte
5

Acho mais fácil mudar para o diretório do qual estou copiando primeiro. Neste exemplo, mude para um diretório que todos chamaram /boot. Qualquer pessoa 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 cpcomando, o diretório atual é identificado como .o /bootdiretório para o qual alteramos. A -ropção torna recursivo incluir todos os subdiretórios.

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

Depois de concluir esta explicação, use: sudo rm -r /boot_backuppara remover o novo diretório e seus subdiretórios.

WinEunuuchs2Unix
fonte
11
Embora isso explique como copiar todos os arquivos do seu diretório atual para outro diretório, ele não responde totalmente à pergunta dos OPs sobre como copiar um diretório (e seu conteúdo) para um nome diferente. Existem comandos mais curtos (como cp -r) que vai cuidar da criação de um novo diretório e copiar todos os arquivos para ele
BlueCacti
11
Ele explica como copiar e direcionar e seu conteúdo - a diferença é que ele muda para o diretório de origem primeiro como um hábito de precaução. cp -rcomo você recomenda já está na terceira linha de comando. O tutorial é baseado no fato de todos terem um /bootdiretório e poderem tentar isso em sua própria máquina. Se eu tivesse usado os cp -r /home/GroundZero/Documents /home/GroundZero/Documents_backupleitores não conseguiria copiar e colar em seus terminais - eles teriam alterações, GroundZerocriando mais trabalho e chances de erro. Espero que você aprecie o KISS desta resposta com um tutorial incorporado.
WinEunuuchs2Unix
11
O @GroundZero, cd ~/Documents/SomeObsucreFolder/2016/Nov/ao definir o diretório atual como diretório de origem, alterará o prompt do Terminal para garantir que está escrito corretamente e, em seguida, o uso cp -r .como fonte elimina a redigitação do diretório de origem. É simplesmente o que considero um bom hábito. Além disso, uma vez mudando para o diretório fonte é fácil de fazer ls FIleName1, ls FileName2etc. para esnure os arquivos que você deseja fazer backup estão lá sem ter que repetir o nome do diretório de origem para o lscomando.
WinEunuuchs2Unix
5

Você pode usar o comando abaixo para copiar o diretório de um local para outro subdiretório.

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

Explicação do comando:

  • -R = copia diretórios recursivamente
  • v = explique o que está sendo feito
  • p = Isso ajudará você a preservar sua permissão e propriedade com registros de data e hora
Rakesh C
fonte
Obrigado @Rakesh Chauhan. "Preserve sua permissão e propriedade com timestamps" ??? Uau .... eu preciso chegar lá !!!! Ainda outro aspecto dos comandos de linha a serem explorados. Obrigado por sua resposta.
Edmuntu 3/11
4

cpé o comando que executa 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 copiaria a source/pasta e todos os seus subdiretórios para destination/.

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

O -Rsinalizador significa recursivo, que informa cppara copiar todos os subdiretórios.

TheOdd
fonte
Obrigado @ Owen Hines. Som como este é definitivamente o comando para os meus task.Cheers
Edmuntu
11
@ Edmuntu Que bom que eu poderia ajudar, se você encontrou a solução para o seu problema, pode marcar a resposta que funcionou para você como a correta, clicando na marca de seleção abaixo dela? Isso ajudará a alertar outras pessoas que visualizam a página da pergunta que está sendo resolvida.
TheOdd
1

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
Robi
fonte