Pesquisa de site

Copie um arquivo para vários diretórios na linha de comando no Linux


Neste breve guia, discutiremos como copiar um arquivo para vários diretórios a partir da linha de comando usando find, cp, echo, Comandos xargs e tee no Linux.

Outro dia eu queria copiar alguns vídeos para pastas diferentes em meu desktop Arch Linux. Como você já sabe, podemos fazer isso facilmente clicando com o botão direito do mouse no arquivo, selecionando a opção Copiar no menu de contexto e colando-o no diretório/pasta de destino.

No entanto, gostaria de saber se existe alguma outra maneira de copiar o arquivo em vários diretórios de uma só vez. Achei que ajudaria quando eu quisesse copiar um único arquivo em vários diretórios diferentes de uma só vez. Fiz algumas pesquisas na web e encontrei as seguintes soluções.

Aviso importante:

Observe que os comandos a seguir não solicitarão nenhuma confirmação. Se existir algum arquivo com o mesmo nome no diretório de destino, ele será substituído automaticamente.

Se você é novo no Linux, sugiro que teste os comandos em qualquer máquina de teste antes de começar a usá-los na produção. Dessa forma, você pode evitar a perda desnecessária de dados.

Copie um arquivo para vários diretórios da linha de comando no Linux

Tenho um arquivo de texto chamado ostechnix.txt em meu diretório inicial e queria copiá-lo para dois diretórios diferentes chamados Downloads< e Documentos de uma só vez.

Primeiro, vamos ver como copiar o arquivo para vários diretórios diferentes usando os comandos find e cp.

Método 1: usando comandos find e cp

Podemos copiar um único arquivo para vários diretórios ao mesmo tempo usando os comandos find e cp.

O find é um comando Unix e Linux para pesquisar arquivos em uma hierarquia de diretórios e o comando cp é usado para copiar arquivos e diretórios.

Para copiar um arquivo chamado ostechnix.txt para os diretórios ~/Downloads e ~/Documents usando find e cp, execute:

find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp ostechnix.txt {} \;

Copie um arquivo para vários diretórios diferentes usando o comando find e cp no Linux

O comando acima copiará o arquivo ostechnix.txt do diretório atual para os diretórios ~/Downloads e ~/Documents.

Se você não especificar a opção '-maxprofundidade 0', o arquivo ostechnix.txt será copiado para  ~/Downloads, ~/Documents e também em seus subdiretórios. Então, não se esqueça de especificá-lo.

Como avisei anteriormente, se já houver algum arquivo com o mesmo nome (ou seja, ostechnix.txt) em qualquer um dos diretórios de destino, o comando acima simplesmente substituirá o arquivo existente sem qualquer confirmação.

Se você não deseja sobrescrever o arquivo existente, você pode usar o sinalizador -n com o comando cp como abaixo:

find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp -n ostechnix.txt {} \;

Agora, ele não substituirá o arquivo de destino se ele já existir nos locais de destino.

Método 2: usando comandos echo, xargs e cp

A outra maneira de copiar arquivos para vários locais é usando os comandos echo, xargs e cp.

Como você já sabe, o comando cp é usado para copiar os arquivos e diretórios, e o comando xargs é usado para construir e executar linhas de comando a partir da entrada padrão.

Para copiar um arquivo para vários diretórios usando os comandos echo, xargs e cp, execute:

echo ~/Downloads ~/Documents | xargs -n 1 cp ostechnix.txt

Copie um arquivo para vários diretórios usando os comandos cp, echo e xargs no Linux

Vamos analisar o comando acima e ver como ele funciona.

Geralmente, o comando echo imprime a string ou texto fornecido na saída padrão. Mas neste caso, canalizamos a saída do comando echo para xargs. Aqui, o comando echo enviará o caminho do diretório para xargs como entrada.

O comando xargs executa o comando cp duas vezes e anexa o caminho de cada diretório ao final do comando cp.

Os comandos xargs recebem dois argumentos (ou seja, caminho do diretório) do comando echo. A opção -n 1 no comando xargs diz ao xargs para anexar apenas um desses argumentos por vez.

Novamente, o comando acima substitui o arquivo de destino se ele já existir. Se você não deseja substituir o arquivo de destino, adicione o sinalizador -n no comando:

echo ~/Downloads ~/Documents | xargs -n 1 cp -n ostechnix.txt

Método 3 – Usando o comando tee

Tee é um utilitário Unix e Linux usado para ler entradas padrão e gravar em arquivos e saídas padrão.

Agora, vamos copiar o arquivo ostechnix.txt em dois diretórios diferentes chamados /home/sk/Downloads e / home/sk/Documentos.

Para fazer isso, basta executar o seguinte comando no Terminal:

tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt

O comando acima copiará o arquivo ostechnix.txt do diretório inicial para o diretório ~/Downloads e ~/Documents.

Observe que o comando tee também gravará a entrada na saída padrão. Se você não quiser que o comando tee faça isso, apenas redirecione a saída padrão para /dev/null conforme mostrado abaixo.

tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt >/dev/null

Copie um arquivo para vários diretórios diferentes usando o comando tee no Linux

Novamente eu te aviso. Se já houver algum arquivo com o mesmo nome (ou seja, ostechnix.txt) nos destinos, o comando acima substituirá o arquivo existente.

Para obter detalhes, verifique as páginas manuais dos comandos acima:

man cp
man find
man xargs
man echo
man tee

Conclusão

É assim que copiamos um arquivo para vários diretórios ao mesmo tempo na linha de comando do Linux. Poderia haver outras maneiras, mas acredito que esses comandos sejam muito simples e fáceis de usar.

Novamente, certifique-se de que os caminhos de destino estejam corretos e, o mais importante, certifique-se de que não exista nenhum arquivo com o mesmo nome no local de destino.

Leitura relacionada:

  • Como encontrar e copiar certos tipos de arquivos de um diretório para outro no Linux
  • Copie tipos de arquivos específicos enquanto mantém a estrutura de diretórios no Linux
  • Copie arquivos e crie diretórios de destino ao mesmo tempo
  • Como copiar arquivos e alterar a propriedade e as permissões ao mesmo tempo
  • Como manter intactas a propriedade e as permissões de arquivo ao copiar arquivos ou diretórios
  • Retomar arquivos parcialmente transferidos por SSH usando Rsync
  • Como transferir rapidamente arquivos grandes pela rede em Linux e Unix
  • Cópia avançada – Adicionar barra de progresso aos comandos cp e mv no Linux
  • Copiar o conteúdo do arquivo para a área de transferência sem exibi-lo

Artigos relacionados