O console ou terminal do Linux é uma ferramenta muito poderosa, se você souber como funciona e como usá-la. Um grande problema para todos os iniciantes é conhecer os comandos básicos, um comando muito básico que todos devemos conhecer é o comando que nos permite copiar arquivos do terminal, e é tão simples que não é necessário anotá-lo.
Copiar arquivos
O comando que usaremos é cp. O formato que utilizaremos é o nome do comando, seguido de um espaço e o caminho absoluto ou relativo do arquivo-fonte a ser copiado, e outro espaço seguido do caminho completo do diretório onde o novo arquivo será copiado, inclusive o nome que terá isso, que pode ser diferente do arquivo-fonte.
Agora no terminal:
cp /tmp/arquivo-antigo.bin /root/novo-arquivo.bin
Com este pequeno trecho de código, um arquivo é copiado para outro local, a única desvantagem é que temos que ajustar as permissões após copiá-lo, a menos que queiramos para o mesmo usuário "root".
Copie arquivos e pastas recursivamente
Para copiar todo o conteúdo da pasta de origem para a pasta de destino usamos o parâmetro -R
.
cp -R /tmp/pasta-fonte /root/pasta-de-destino
Usando caractere curinga para copiar e copiar recursivamente
Às vezes, precisamos copiar arquivos com base em sua extensão ou nome de arquivo, portanto, é melhor usar curingas.
Se precisarmos copiar arquivos de primeiro nível ou recursivamente da pasta atual com extensão .js
.
Simples, só o primeiro nível:
cp *.js /home/usuário/destino/
Recursivo, todos os arquivos com a extensão anterior são copiados para o nível superior e para todas as pastas internas:
cp -R *.js /home/usuário/destino/
Lista de caractere curinga úteis:
*
refere-se a todo o conteúdo do diretório, incluindo outros diretórios; não seleciona arquivos e pastas ocultos..
refere-se à pasta atual..*
refere-se a todos os arquivos e pastas, inclusive os ocultos.*.*
refere-se a todos os arquivos que usam o formatonome.extensão
.
Copie o conteúdo da pasta atual para outra pasta recursivamente
Se estivermos em uma pasta e quisermos copiar todos os arquivos recursivamente para outra pasta, usamos o curinga .
e o parâmetro -R
.
cp -R . /root/diretório/
Para que o comando anterior funcione devemos nos colocar no diretório que contém o conteúdo que queremos copiar com cd
.
Por exemplo, cd /root/conteudo/
, e a partir daí execute o comando que irá copiar todo o conteúdo da pasta, mas sem copiar a pasta pai.
Copiar com caminhos relativos
Normalmente, quando copiamos arquivos e pastas o fazemos com caminhos absolutos, ou seja, caminhos completos, mas também podemos usar caminhos relativos ao diretório em que estamos. Existem casos especiais em que isso é necessário, por exemplo, se baixamos um arquivo zip e o descompactamos em um diretório, mas seu conteúdo foi salvo em um diretório chamado directory-123-downloaded, que tem o mesmo nome do arquivo zip, diretório-123-downloaded.zip, então precisamos que todo o conteúdo do diretório seja copiado um diretório de volta.
Caminhos relativos no Linux são tratados com dois pontos seguidos de ..
para indicar um nível acima e não devem começar com uma diagonal. Pode ser o caso de utilizar os dois pontos com rotas absolutas, mas isso é outro assunto. Um único ponto após a barra indica que o conteúdo dessa pasta será usado e não a pasta em si. Por outro lado, podemos substituir os dois pontos pelo curinga *
para aumentar os níveis.
Exemplo para copiar recursivamente um nível atrás e apenas o conteúdo do diretório:
cp diretório/. ../
Parece um pouco estranho, mas é bastante simples e prático, você pode até combinar os dois pontos com vários níveis, por exemplo:
cp diretório/. ../../../../
Só não recomendo porque é chato ter que contar os níveis e calcular as posições. Mas para situações simples em que apenas um ou dois níveis de diferença são tratados, não deverá haver problema.
Exemplo para copiar recursivamente um nível para trás e dois níveis para frente com curingas e apenas o conteúdo do diretório:
cp diretório/. ../nova-rota-incompl*/dire*o/
Como podemos ver, podemos completar os caminhos com curingas, uma das situações que mais nos ajuda é quando temos uma pasta com o nome de um projeto seguido de sua versão e não sabemos a versão, por exemplo, php-7.*
.