Como copiar e excluir arquivos ou diretórios internos (equivalente a rsync –exclude)

Se eu pedisse a você para mencionar um comando para copiar uma pasta para outro local, quase todo mundo mencionaria cp.

Agora, se eu disser que, além disso, você deve copiar todo o conteúdo dessa pasta exceto 1 arquivo, muitos estariam pensando e outros mencionariam rsync, então com o parâmetro -Excluir você pode excluir o arquivo ou pasta X e não copiá-lo. Mas ... você sabia que o cp também permite que você faça isso? ... O_O … sim amigos, cp tem seu próprio "excluir" hehe.

Por exemplo, temos a pasta isos que contém: ubuntu.iso, debian.iso y archlinux.iso :

E acontece que queremos copiar para a outra pasta (distros-deb, que está vazio) o arquivo debian.iso y ubuntu.iso, isto é, todos exceto archlinux.iso

Para isso poderíamos copiar um arquivo e depois outro, manualmente, mas é muito mais inteligente usar as opções que o sistema nos oferece, certo? … 😀… por exemplo, para fazer isso apenas:

cp isos/!(archlinux.iso) distros-deb/

E isso é o suficiente para copiar TUDO contido no diretório isos para distros-deb, tudo exceto archlinux.iso 😉

Mas suponha que não tenhamos apenas esses 3 arquivos, mas também tenhamos fedora.iso e chakra.iso ... e queremos fazer o mesmo, também seriam excluídos da cópia fedora.iso e chakra.iso, vamos ver como fazer isso:

cp isos/!(archlinux.iso|fedora.iso|chakra.iso) distros-deb/

Como você pode ver, vários arquivos ou pastas podem ser excluídos, nós apenas os separamos por um tubo (|) e assunto resolvido 😀

Com isso não quero dizer que cp seja melhor para tudo do que rsync ... mas, ambos são excelentes ferramentas, por exemplo ... você conhecia o parâmetro -u de cp? ... hehe, claro que não 😉

Bem, nada mais a acrescentar ... esta é uma dica interessante? 😀

lembranças


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   Josh dito

    Eu não conhecia esse método, você sempre aprende algo novo.
    Excelente dica, obrigado.

    1.    KZKG ^ Gaara dito

      Obrigado

  2.   crotus dito

    A dica é muito boa, não sabia! Resta apenas explicar aos usuários do Arch e do Fedora porque você excluiu suas iso's hehe

    1.    KZKG ^ Gaara dito

      JAJAJAJAJAJA Não coloquei as ISOs Arch e Fedora porque o exemplo tentou copiar apenas distros Deb ... HAHAHAHAHA.

  3.   hexborg dito

    Aqui temos que fazer algumas observações. Uma é que isso só funciona se a opção extglob do bash estiver habilitada. Se não estiver, ele é ativado com este comando:

    comprar -s extglob

    Ele pode ser colocado no .bashrc para tê-lo sempre ativado.

    O outro ponto é que esse truque não é uma opção do comando cp, mas funciona no nível do bash. O que significa que pode ser usado com qualquer comando. Não apenas com cp. Você pode fazer o teste escrevendo:

    Arquivos echo: isos /! (archlinux.iso | fedora.iso | chakra.iso)

    Caso contrário, é um truque muito útil. Junto com a opção -u para cp, que também acho útil de vez em quando.

    1.    Daniel Rojas dito

      Claro, é uma expressão regular

      1.    hexborg dito

        Na verdade, é um padrão estendido. Uma expressão regular é outra coisa, mas parece. 🙂

    2.    KZKG ^ Gaara dito

      Sim, o -u em cp é realmente interessante. Admito que sou um grande fã de rsync ... mas não sei, tenho um apego ao pobre policial hahaha.

      Sobre ativar o shopt, eu não sabia, presumi que funcionasse automaticamente, obrigado pela dica.

      E sim, eu estava suspeitando que tinha mais a ver com Bash do que com cp, mas ainda não tinha tentado fazer um rm ou um gato ou algo parecido :)

      Obrigado pelo comentário, eu realmente 😀

      1.    hexborg dito

        É um prazer fazer minha parte. 🙂

        1.    KZKG ^ Gaara dito

          Na verdade, sempre me interessei em aprender sobre expressões regulares ... você fica animado e faz um post de novato sobre isso? 😀

          1.    hexborg dito

            RI MUITO!! Você já me tem. 🙂 Com o quão feliz eu estava sem comentários ... 🙂

            Bem, a verdade é que ele está me chamando. 🙂 Mas eu ainda tenho que pensar um pouco sobre isso. Parece difícil de explicar.

            1.    KZKG ^ Gaara dito

              hahahahaha nada não se preocupe, você fica comentando que ainda aprende ahahahaha, o importante é compartilhar 😀


  4.   tufadorina dito

    Dica muito boa Você nunca irá para a cama sem aprender algo novo.

    1.    KZKG ^ Gaara dito

      Exatamente, e o melhor de tudo é que aprendo muito com os comentários que você deixa nos posts, adoro aprender coisas estranhas todos os dias HAHAHA.

  5.   moela dito

    Bom truque. Eu não o conhecia 🙂

    1.    KZKG ^ Gaara dito

      Um prazer 😉

  6.   @Jlcmux dito

    Mas quando você coloca isos você quer dizer debian.iso ubuntu.iso /! (Etc etc)? não

  7.   Heber dito

    Na verdade, acabou sendo uma dica muito interessante. Não apenas pelo próprio artigo, mas também pelo valor agregado dos comentários.
    Linda comunidade de <º Linux

  8.   MARTA DO POÇO dito

    A tua ajuda não me serviu de nada, deves dar o exemplo, para que os alunos possam melhor compreender a tua magnífica técnica.
    Obrigado por dedicar seu tempo, sempre lembrarei desta página em meu coração

  9.   felipe016 dito

    você diz que pula diretórios, porém nos exemplos você pula apenas arquivos, você sabe como pular um diretório específico? Saudações.