Comandos Linux – Comando cp

Comando Linux cp

Atualizado: 05/04/2019 por Computer Hope

comando cp

Em sistemas operacionais do tipo Unix, o comando cp faz cópias de arquivos e diretórios.

Este documento descreve a versão GNU / Linux do cp .

Descrição

A forma geral do comando é destino de origem cp , por exemplo:

  cp myfile.txt myfilecopy.txt

Como muitos comandos principais do Linux, se o comando cp for bem-sucedido, por padrão, nenhuma saída será exibida. Para exibir a saída quando os arquivos são copiados, use a opção -v (detalhada).

Por padrão, o cp substituirá os arquivos sem perguntar. Se o nome do arquivo de destino já existir, seus dados serão destruídos. Se você deseja ser solicitado a confirmar antes que os arquivos sejam substituídos, use a opção -i (interativa).

Sintaxe

  cp [ opção ] ... [ -T ] destino de origem
  diretório cp [ opção ] ... origem ...
  cp [ opção ] ... -t fonte do diretório ...
  cp --help
  cp --version

Opções

-a,
–archive
O mesmo que -dR –preserve = ALL . Ao executar a cópia, tente preservar o máximo possível da estrutura, atributos e metadados do arquivo original. Esses metadados incluem dados do contexto de segurança se você estiver executando o SELinux .
–attributes-only Não copie os dados do arquivo, apenas crie um arquivo com os mesmos atributos . Se o arquivo de destino já existir, não altere seu conteúdo. Você pode controlar exatamente quais atributos são copiados com a opção –preserve .
–backup[=control]] Faça um backup de cada arquivo de destino existente que seria substituído ou removido. O parâmetro de controle especifica qual método de controle de versão usar; consulte controle de versão para obter detalhes.

Como um caso especial, o cp –force –backup fará um backup da origem quando source e dest forem o mesmo arquivo regular.

-b Como – backup , mas não aceita um argumento de controle ; o método de controle padrão é sempre usado.
–copy-contents Ao operar recursivamente , copie o conteúdo de arquivos especiais, como FIFOs e dispositivos encontrados em / dev . Você geralmente não deseja usar esta opção, pois pode ter resultados indesejados, como travar para sempre ou encher todo o disco. No entanto, esta opção está disponível para casos de uso especiais e especializados.
-d Copie os links simbólicos em si, em vez dos arquivos a que se referem, e preserve os links físicos entre os arquivos de origem nas cópias. O mesmo que ” –no-dereference –preserve = links “.
-f,
–force
Se um arquivo de destino existente não puder ser aberto, remova-o e tente novamente. Esta opção não tem efeito se a opção -n / –no-clobber for usada. No entanto, ele se aplica independentemente de -i / –interactive ; nenhuma opção cancela o efeito da outra.
-i,
–interactive
Avisar antes de substituir (substitui uma opção -n anterior).
-H Siga os links simbólicos especificados na linha de comando, mas preserve os links descobertos.

Se um dos argumentos na linha de comando for um link simbólico , copie o arquivo referenciado, não o próprio link. No entanto, se um link simbólico for descoberto durante o percurso recursivo, ele será copiado como um link simbólico, não como um arquivo regular.

-l,
–link
Crie links físicos para arquivos em vez de copiá-los.
-L,
–dereference
Sempre siga os links simbólicos na fonte ; se a origem for um link simbólico, copie o arquivo vinculado ao invés do próprio link simbólico. Quando esta opção é especificada, o cp não pode criar links simbólicos nas cópias de destino.
-n ,
–no-clobber
Não substitua um arquivo existente. Se -i / –interactive foi especificado anteriormente, esta opção a substitui. Esta opção não pode ser especificada com -b / –backup , porque os backups são criados apenas quando um arquivo foi substituído.
-P ,
–no-dereference
Nunca siga links simbólicos na fonte ; copiar links simbólicos como links simbólicos. Os links simbólicos existentes encontrados no destino ainda podem ser seguidos.
-p O mesmo que –preserve = mode, propriedade, timestamps .
–preserve = [ attr_list ] Preserve os atributos especificados, separados por vírgula. Os atributos são:

modo Preserve os bits do modo de arquivo (conforme definido com chmod ) e quaisquer ACLs .
propriedade Preserve o proprietário e o grupo (conforme definido com o chown ). A capacidade de preservar esses atributos é restrita da mesma maneira que o uso de chown .
timestamps Preserve a hora do último acesso e modificação do arquivo ( atime e mtime , conforme definido com o toque ), se possível.
ligações Preserve nos arquivos de destino todos os links entre os arquivos de origem. Com -L ou -H , essa opção pode potencialmente copiar links simbólicos como links físicos.
contexto Preserve o contexto de segurança SELinux dos arquivos de origem ou falhe com diagnósticos detalhados.
xattr Preserve atributos estendidos de arquivos de origem ou falhe com diagnósticos detalhados.
tudo Preserve todas as opções acima. O mesmo que especificar todos os atributos acima individualmente, com exceção de que a falha ao copiar o contexto ou o xattr não dará um status de saída de falha.

Se não especificado, o valor padrão de attr_list é ” modo, propriedade, registros de data e hora “.

–no-preserve = attr_list Não preserve os atributos especificados.
–pais Crie diretórios-pai ausentes no destino, se necessário, ao copiar para o diretório de destino, de acordo com o nome do caminho especificado na origem .

Por exemplo, ” cp –parents dir2 / dir3 / file dir1 ” cria o arquivo de destino ” dir1 / dir2 / dir3 / file “, mesmo que dir2 e dir3 não existam atualmente em dir1 .

-R,
-r,
–recursive
Copie diretórios recursivamente.
–reflink = [ quando ] Execute um clone otimizado de CoW (“copiar na gravação”), se o sistema de arquivos de destino suportar. A cópia resultante compartilhará os mesmos bytes em disco que o arquivo original, até que a cópia seja modificada. Esteja ciente de que isso significa que, se os bytes de origem estiverem corrompidos, o destino compartilhará os dados corrompidos.

O parâmetro when define o que acontecerá se a cópia na gravação não for suportada pelo sistema de arquivos de destino. Se when for sempre (o padrão), a cópia falhará. Se automática , a cópia prosseguirá, usando o comportamento padrão da cópia.

–remove-destination Remova cada arquivo de destino existente antes de tentar abri-lo (contraste com a opção –force , que remove o destino somente após uma falha na tentativa de abrir).
–sparse=when Controlar a criação de arquivos esparsos.

Um arquivo esparso contém “buracos”, onde um buraco é uma sequência de zero bytes que não ocupa espaço físico em disco. Quando o arquivo é lido, os furos são lidos como zeros. Isso pode economizar espaço em disco, pois muitos arquivos contêm longas seqüências de zeros. Por padrão, o cp detecta arquivos esparsos e cria arquivos de destino esparsos também.

O parâmetro when define o que o cp deve fazer quando um arquivo de origem for esparso:

auto Se a fonte for escassa, tente tornar o destino escasso. Se o destino existir e for um arquivo não comum, não tente torná-lo esparso. Esse é o padrão.
sempre Para cada sequência suficientemente longa de zero bytes na origem, tente fazer um furo esparso no destino, mesmo se o arquivo de entrada não for esparso. Isso pode ser útil se o sistema de arquivos de origem não suportar arquivos esparsos; um arquivo esparso pode ser criado adequadamente no sistema de arquivos de destino.
Nunca Nunca torne o arquivo de saída escasso. Alguns arquivos especiais, como um arquivo de troca, nunca devem ser esparsos. Nesses casos, essa opção deve ser usada.
–strip-trailing-slashes Remova as barras finais de cada argumento de origem .
-s ,
–symbolic-link
Faça links simbólicos em vez de copiar os arquivos. Todos os arquivos de origem devem ser nomes de caminho absolutos começando com uma barra, a menos que os arquivos de destino estejam no diretório atual.
-S ,
–suffix = sufixo
Substitua o sufixo de backup usual.
-t ,
–target-directory = diretório
Copie todos os argumentos de origem no diretório
-T,
–no-target-directory
Trate o destino como um arquivo normal.
-u,
–update
Copie apenas quando o arquivo de origem for mais novo que o arquivo de destino ou quando o arquivo de destino estiver ausente.
-v ,
–verbose
Modo verboso ; explique o que está sendo feito.
-x,
–one-file-system
Apenas opere no sistema de arquivos em que o comando foi executado. Se o cp tentar cruzar a fronteira para outro sistema de arquivos, esses arquivos serão ignorados. Isso inclui unidades em rede, outra partição – qualquer arquivo que reside em um sistema de arquivos com um ponto de montagem diferente.

O diretório que representa o próprio ponto de montagem será copiado, mas não atravessado.

Se -v for especificado, você verá exatamente quais arquivos foram ignorados.

–help Exiba uma mensagem de ajuda e saia.
–version Informações de versão de saída e saída.

Por padrão, os arquivos de origem esparsos são detectados por uma heurística bruta e o arquivo de destino correspondente também é esparso. Esse é o comportamento selecionado por –sparse = auto . Especifique –sparse = sempre para criar um arquivo de destino esparso sempre que o arquivo de origem contiver uma sequência suficientemente longa de zero bytes. Use –sparse = nunca para inibir a criação de arquivos esparsos.

Quando –reflink [ = sempre ] é especificado, o cp executa uma cópia leve, na qual os blocos de dados são copiados apenas quando modificados. Se isso não for possível, a cópia falha; ou, se –reflink = auto for especificado, cp retornará a uma operação de cópia padrão.

Controle de versão

Ao usar -b / –backup , o sufixo de backup é ‘ ~ ‘, a menos que definido com –suffix ou SIMPLE_BACKUP_SUFFIX . O método de controle de versão pode ser selecionado através da opção –backup = control ou através da variável de ambiente VERSION_CONTROL . Os possíveis valores de controle ou VERSION_CONTROL são:

noneoff Nunca faça backups (mesmo se –backup for fornecido).
numberedt Faça backups numerados.
existingnil Numerado se existirem backups numerados, simples caso contrário.
simplenever Sempre faça backups simples.

Como um caso especial, o cp faz um backup da fonte quando as opções de força e backup são fornecidas e a origem e o destino têm o mesmo nome para um arquivo regular existente.

Exemplos

Digamos que você tenha um arquivo chamado picture.jpg em seu diretório de trabalho e deseje fazer uma cópia chamada picture-02.jpg . Você executaria o comando:

  cp picture.jpg foto-02.jpg

… e o arquivo será copiado. Aqui, picture.jpg é a fonte da operação de cópia e picture-02.jpg é o destino. Agora os dois arquivos existem no seu diretório de trabalho.

Os arquivos de origem e destino também podem residir em diretórios diferentes. Por exemplo,

  cp /home/chuck/pictures/picture.jpg /home/chuck/backup/picture.jpg

… fará uma cópia do arquivo /home/chuck/pictures/picture.jpg no diretório / home / chuck / backup . O arquivo de destino também será nomeado como picture.jpg .

Se você é o usuário chuck , pode abreviar seu diretório pessoal (” / home / chuck “) usando um til (” ~ “). Por exemplo,

  cp ~ / pictures / picture.jpg ~ / backup / picture.jpg

… funciona da mesma forma que o comando acima quando executado pelo mandril .

Copiando vários arquivos para um diretório

Ou talvez você queira copiar vários arquivos em outro diretório. Para fazer isso, você pode especificar vários arquivos como origem e um nome de diretório como destino. Digamos que você seja o usuário sally e tenha vários arquivos no diretório / home / sally / pictures / denominado picture-01.jpg , picture-02.jpg etc. e deseja copiá-los para o diretório / Página inicial / Sally / Backup de imagem / . Este comando fará o truque:

  cp ~ / pictures / picture - *. jpg ~ / backup de imagem

Aqui, usamos um curinga (o asterisco ” * “) para indicar que os arquivos de origem são todos os arquivos do diretório / home / sally / pictures cujo nome começa com ” picture- ” e tem a extensão ” .jpg “. Eles serão copiados no diretório / home / sally / picture-backup , assumindo que o diretório já exista. Se não existir, o cp fornecerá uma mensagem de erro e nenhum arquivo será copiado.

Você também pode especificar vários arquivos de origem, um após o outro, e o cp esperará que o argumento final seja um nome de diretório e copie todos eles lá. Por exemplo,

  cp ~ / fotos / foto-01.jpg ~ / fotos / foto-02.jpg ~ / foto-backup

… copiará apenas esses dois arquivos, /home/sally/picture-01.jpg e /home/sally/picture-02.jpg , no diretório / home / sally / picture-backup .

Copiando arquivos recursivamente

Você pode usar o cp para copiar estruturas de diretórios inteiras de um local para outro usando a opção -R para executar uma cópia recursiva. Digamos que você seja o usuário steve e tenha um diretório / home / steve / files , que contém muitos arquivos e subdiretórios. Você deseja copiar todos esses arquivos e todos os subdiretórios (e os arquivos e subdiretórios que eles contêm) para um novo local, / home / steve / files-backup . Você pode copiar todos eles usando o comando:

  cp -R ~ / files ~ / files-backup

… e toda a estrutura de diretórios será copiada para o diretório / home / steve / files-backup . Ao executar uma cópia recursiva:

  • Se o backup de arquivos do diretório já existir, os arquivos do diretório serão colocados dentro.
  • Se o backup de arquivos ainda não existir, ele será criado e o conteúdo do diretório de arquivos será colocado dentro dele.

Outro truque útil é usar o cp para criar links simbólicos para os arquivos de origem. Você já deve estar familiarizado com o uso do comando ln para criar links simbólicos; O cp é uma ótima maneira de criar vários links simbólicos de uma só vez.

O cp cria links simbólicos se você especificar a opção -s . Então, por exemplo,

  cp -s arquivo.txt arquivo2.txt

… cria um link simbólico, file2.txt , que aponta para file.txt .

Você também pode criar links simbólicos a partir de vários arquivos de origem, especificando um diretório como o destino.

NotaPara criar links simbólicos em outro diretório, o cp precisa que você especifique o nome do caminho completo, incluindo o nome completo do diretório, nos nomes dos arquivos de origem. Caminhos relativos não funcionarão.

Digamos que você seja o usuário melissa e tenha um conjunto de arquivos, file01.txt , file02.txt , etc. no diretório / home / melissa / myfiles . Você deseja criar links simbólicos para esses arquivos no diretório existente / home / melissa / myfiles2 . Este comando fará o truque:

  cp -s ~ / meus arquivos / arquivo * .txt ~ / meus arquivos

O diretório myfiles2 agora conterá links simbólicos para o arquivo * .txt no diretório / home / melissa / myfiles . O diretório myfiles2 já deve existir para que a operação seja bem-sucedida; se não existir, o cp fornecerá uma mensagem de erro e nada será copiado.

Isso também funcionará com uma cópia recursiva. Então o comando:

  cp -R -s ~ / meus arquivos ~ / meus arquivos2

… recriará a estrutura de diretórios de / home / melissa / myfiles , incluindo quaisquer subdiretórios e seu conteúdo; todos os arquivos serão criados como links simbólicos para os originais, mas os diretórios não serão links simbólicos, apenas diretórios regulares. Se myfiles2 já existir, o cp cria um diretório dentro dele chamado myfiles que contém a estrutura de diretórios e links simbólicos; se o myfiles2 ainda não existir, ele será criado e conterá os subdiretórios e links simbólicos para os arquivos que o myfiles contém.

Existem outras opções que você pode fornecer ao cp que afetará seu comportamento. Eles são listados, juntamente com a sintaxe precisa do comando, nas seções a seguir.

Faça uma cópia de um arquivo no mesmo diretório

  cp origfile newfile

Cria uma cópia do arquivo no diretório de trabalho chamado origfile . A cópia será nomeada newfile e estará localizada no diretório de trabalho.

CuidadoSe o novo arquivo de destino já existir, ele será substituído sem um prompt de confirmação . Este é o comportamento padrão para todas as operações cp .

Se você deseja ser avisado antes de substituir um arquivo, use a opção -i (interativa). Por exemplo:

  cp -i oldfile newfile

Se o novo arquivo já existir, você será solicitado:

  cp: substituir 'novo arquivo'?

Se você digitar y (ou sim , Y , YES ou qualquer outra combinação de maiúsculas e minúsculas), o novo arquivo será substituído por uma cópia do arquivo de origem . Digitar qualquer outra coisa interromperá a operação.

Copie um arquivo para outro diretório

  cp origfile / directory / subdiretório

Cria uma cópia do arquivo no diretório de trabalho chamado origfile . A cópia estará localizada no diretório / directory / subdiretório e será nomeada origfile .

  cp origfile / directory / subdiretório /.

O mesmo que o comando acima. O ponto de barra ( /. ) Está implícito na forma acima do comando. (O ponto é um arquivo especial em todo diretório Linux que significa “este diretório”.)

Copie um arquivo para outro diretório e atribua um novo nome

  cp origfile / directory / subdiretório / newfile

Cria uma cópia do arquivo no diretório de trabalho chamado origfile . A cópia será nomeada newfile e estará localizada no diretório / directory / subdiretório .

Copie vários arquivos em outro diretório, usando um curinga

  arquivo cp * / diretório / subdiretório

Copie todos os arquivos no diretório de trabalho cujo nome comece com o arquivo no diretório / directory / subdiretório . O asterisco (” * “) é um curinga – um caractere especial que se expande para corresponder a outros caracteres. Especificamente, o curinga do asterisco corresponde a zero ou mais caracteres que não sejam espaços em branco . Por exemplo, este comando copiará todos os arquivos nomeados arquivo , arquivo001 , arquivo.txt , arquivo.jpg , arquivo-arquivo.zip , etc.

  arquivo cp * .jpg / directory / subdiretório

Copie todos os arquivos no diretório ativo cujo nome comece com arquivo e termine com a extensão .jpg . Por exemplo, ele faria cópias de qualquer arquivo chamado file , file001.jpg , file002.jpg ou file-new.jpg , etc. As cópias serão colocadas no diretório / diretório / subdiretório .

Copie uma estrutura de diretório inteira para outro local

  cp -R / um / dois / três / quatro

Copie o diretório dois (localizado no diretório / one ) e tudo o que ele contém, no diretório de destino / three / four . O resultado será chamado / três / quatro / dois . O diretório / três já deve existir para que o comando seja bem-sucedido. Se o diretório quatro ainda não existir no diretório / three , ele será criado.

  cp file1.txt newdir

Copia o arquivo1.txt no diretório de trabalho para o subdiretório newdir .

  cp /home/public_html/mylog.txt /home/public_html/backup/mylog.bak

Copia o arquivo mylog.txt no diretório public_html no diretório public_html / backup como mylog.bak .

  cp -u * .txt newdir

Copie todos os arquivos que terminam em .txt no diretório newdir , mas apenas se os arquivos ainda não existirem no novo diretório ou se os arquivos que estão sendo copiados forem mais recentes.

  cp -R / home / esperança / arquivos / * / home / esperança / backup

Copia recursivamente todos os arquivos, diretórios e subdiretórios do diretório / home / hope / files para o diretório / home / hope / backup . Se o backup do diretório não existir no diretório / home / hope , ele será criado.

cp –backup origfile newfile

Se o novo arquivo já existir, faça um backup do novo arquivo existente antes de substituí-lo por uma cópia do origfile . Por padrão, o backup do novo arquivo será nomeado como novo arquivo ~ .

cp –backup = novo arquivo de origfile numerado

Se o novo arquivo já existir, faça um backup do novo arquivo existente antes de substituí-lo por uma cópia do origfile . O backup do novo arquivo será nomeado como novo arquivo. ~ 1 ~ se não houver outro backup, ou novo arquivo. ~ 2 ~ se houver novo arquivo. ~ 1 ~ , etc.

dd – Copie e converta a codificação de arquivos.
ln – Crie um link, ou um link simbólico, para um arquivo ou diretório.
mv – Mova arquivos e diretórios de um local para outro e, opcionalmente, renomeie-os.

Categorias
Compartilhe esse post

Posts populares

Linux Force Security Cursos de linux e segurança da informação

Seu futuro na tecnologia começa agora! Não deixe essa chance escapar.