Comando Linux 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:
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:
|
||||||||||||||
–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:
none, off | Nunca faça backups (mesmo se –backup for fornecido). |
numbered, t | Faça backups numerados. |
existing, nil | Numerado se existirem backups numerados, simples caso contrário. |
simple, never | 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.
Criando links simbólicos em vez de copiar dados
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.
Comandos relacionados
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.