Copie arquivos e crie diretórios de destino ao mesmo tempo no Linux
Geralmente copiamos arquivos de um local para outro existente usando comandos como cp
, rsync
e scp
etc. existir, primeiro o criamos e depois copiamos o arquivo para o local recém-criado. Até agora, é assim que costumo copiar arquivos de um local para outro na linha de comando. Você sabia que podemos copiar um arquivo e criar o diretório de destino automaticamente caso ele não exista? Não? Sem problemas! Neste guia, veremos como copiar arquivos e criar diretórios de destino ao mesmo tempo, com um único comando, no Linux.
Observe que não estou falando sobre combinar dois comandos. Por exemplo, qualquer um poderia fazer isso combinando dois comandos como abaixo:
mkdir -p destination && cp source_file destination
Mas, este não é um comando único. Aqui usamos dois comandos, ou seja, mkdir
e cp
. Na verdade, é um comando de uma linha. Agora deixe-me mostrar como fazer a mesma tarefa usando apenas um comando.
Copie arquivos e crie diretórios de destino ao mesmo tempo no Linux
Podemos fazer isso usando três métodos diferentes. Primeiro veremos como fazer isso usando o comando install
.
Método 1 - usando o comando install
O comando install
copia os arquivos para qualquer destino de sua escolha no Linux. É especialmente usado para esse propósito por sistemas de construção como automake
. Faz parte do GNU coreutils, então você não precisa instalá-lo.
Para copiar um arquivo e criar o diretório de destino ao mesmo usando o comando install
, basta executar:
install -D source-file destination-directory
Exemplo:
O comando a seguir copia um arquivo chamado sk.txt
para um diretório de destino chamado ostechnix
. Observe que o diretório de destino não existe. Vamos copiar o arquivo e criar o diretório de destino ao mesmo tempo com o comando install
como abaixo:
install -D sk.txt ostechnix/sk.txt
Verifique se o arquivo foi copiado para o diretório ostechnix
listando seu conteúdo com o comando ls
:
ls ostechnix/
sk.txt
Copie um arquivo e crie o diretório de destino ao mesmo tempo usando o comando de instalação
Ver? Não criei o diretório de destino antes. O comando de instalação criou o diretório automaticamente e salvou o arquivo nele.
Prático, certo? De fato! Este é um dos recursos úteis do comando install
. Pode-se usar isso em scripts de shell.
Existem algumas limitações neste método. Você deve mencionar o nome do arquivo de origem no final do local de destino. Se você não especificar o nome do arquivo, o comando install
não o copiará e exibirá o seguinte erro:
install -D sk.txt ostechnix/
install: target 'ostechnix/' is not a directory: No such file or directory
Você pode copiar um arquivo por vez. Não há como copiar vários arquivos para vários destinos usando o comando install
.
Também podemos copiar arquivos e alterar a propriedade e as permissões ao mesmo tempo usando o comando install
conforme descrito no guia a seguir.
- Como copiar arquivos e alterar a propriedade e as permissões ao mesmo tempo
Para obter mais detalhes sobre o comando de instalação, consulte sua página manual.
man instal
l
Método 2 - usando o comando cp
Geralmente, usamos o comando cp
para copiar arquivos de um lugar para outro. O comando cp
possui uma opção chamada --parents
que nos permite copiar toda a estrutura de diretórios do arquivo de origem e salvá-lo no destino.
Por exemplo, digamos que o arquivo sk.txt
está salvo no diretório ~/Downloads
e você deseja copiá-lo para ~/Documents
diretório. Se você copiar o arquivo usando o comando cp
de ~/Downloads
para ~/Documents
, o arquivo será salvo em uma estrutura de diretório como esta -> ~/Documents/Downloads/sk.txt
.
Vamos fazer isso em tempo real e ver o que acontece.
cp --parents Downloads/sk.txt ~/Documents/
Agora execute o comando tree
para verificar o conteúdo do diretório ~/Documents
:
tree Documents/
Documents/
└── Downloads
└── sk.txt
1 directory, 1 file
Copie um arquivo e crie o diretório de destino ao mesmo tempo usando o comando cp
Lembre-se de que não criamos nenhum diretório dentro do local ~/Documents
. A opção --parents
do comando cp
preservou a estrutura de diretórios do arquivo de origem.
Ao contrário do comando install
, você não precisa especificar o nome do arquivo no final do diretório de destino.
Isso não está diretamente relacionado ao nosso tópico. No entanto, o comando cp
criou os diretórios de destino automaticamente, ou seja, preservou a estrutura de diretórios do arquivo de origem.
Método 3 - usando o comando rsync
Rsync
é uma solução ideal para copiar e fazer backup de dados entre diretórios locais e remotos. Para copiar arquivos e criar diretórios de destino usando o comando rsync, execute:
rsync sk.txt ostechnix/
Onde o diretório chamado ostechnix
não precisa existir. O Rsync irá criá-lo automaticamente e salvar o arquivo de origem dentro dele.
Copie um arquivo e crie o diretório de destino ao mesmo tempo usando o comando rsync
Entre esses três comandos, prefiro o comando install
. Porque posso criar diretórios aninhados (diretório dentro de outro diretório) usando o comando install
. Os comandos cp
e rsync
só podem criar um diretório, até onde eu sei. Por favor corrija-me se eu estiver errado.
Leitura relacionada:
- Como manter intactas a propriedade e as permissões de arquivo ao copiar arquivos ou diretórios