28Jun

Como copiar um arquivo para vários diretórios com um comando no Linux

click fraud protection

Copiar um arquivo com a linha de comando do Linux é fácil. No entanto, e se você quiser copiar o mesmo arquivo para vários locais diferentes? Isso também é fácil, e mostraremos como fazer isso com um único comando.

Normalmente, para copiar um arquivo, você usaria o comando cp, ligando para o arquivo de origem e o diretório de destino:

cp ~ /Documents/ FileToBeCopied.txt ~ /TextFiles/

Para copiá-lo para mais dois diretórios, muitas pessoas simplesmente executariam o comando doismais vezes, com diferentes destinos:

cp ~ /Documents/ FileToBeCopied.txt ~ /Dropbox/ cp ~ /Documents/ FileToBeCopied.txt /media/lori/MYUSBDRIVE/

No entanto, podemos fazer a mesma tarefa com um comando:

echo dir1 dir2 dir3 |xargs -n 1 arquivo cp1

Veja como funciona este comando. O comando de eco normalmente grava na tela. No entanto, neste caso, queremos alimentar a saída do comando echo como entrada para o comando xargs. Para fazer isso, usamos o símbolo de pipe( |) que alimenta saída de um comando como entrada para outro. O comando xargs executará o comando cp três vezes, cada vez que anexando o próximo caminho do diretório encaminhado para ele a partir do comando echo para o final do comando cp. Há três argumentos passados ​​para xargs, mas a opção -n 1 no comando xargs diz que ele apenas anexe um desses argumentos ao mesmo tempo ao comando cp cada vez que ele é executado.

instagram viewer

Então, para ficar com o nosso exemplo anterior, os três comandos cp separados acima podem ser combinados em um comando como este:

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp ~ /Documents/ FileToBeCopied.txt

Observe que, se o arquivo que está sendo copiado existe em qualquer um dos diretórios de destino especificados, o arquivo nesse destino será substituído automaticamente. Não será perguntado se você deseja substituir o arquivo.(Normalmente, quando você usa o comando cp para copiar um arquivo para um único local, você pode adicionar a opção -i para perguntar se você deseja substituir um arquivo existente. No entanto, a opção -i é uma opção interativa( faz com quecomando cp para pedir a entrada do usuário) e você não pode usar uma opção interativa com o comando cp ao usá-lo em conjunto com xargs.)

Uma outra coisa a considerar, é que se você estiver copiando um arquivo muito grande, você podequer adicionar a opção no-clobber( -n) ao comando cp no comando único acima. Esta opção impede automaticamente que um arquivo seja substituído em um destino se ele já existe. Se você estiver copiando um arquivo muito grande em uma rede, pode ser lento e você pode querer evitar o uso dos recursos necessários para copiar e substituir o arquivo. O comando a seguir adiciona a opção -n e não copiará o arquivo para qualquer destino listado nos argumentos para a declaração de eco, se o arquivo já existir nesse destino.

echo ~ /TextFiles/ ~ / Dropbox /media/lori/ MYUSBDRIVE |xargs -n 1 cp -n ~ /Documents/ FileToBeCopied.txt

Digite man echo, man xargs ou man cp na linha de comando no Linux para obter mais informações sobre qualquer um desses comandos.