Pesquisa de site

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 install

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

Artigos relacionados