De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Mais do find

Colaboração: Márcio C. M. Rezende

Data de Publicação: 16 de Maio de 2009

Dei uma buscada em dicas por aqui e não encontrei o que precisava: Como montar um archive cpio ignorando alguns arquivos ou diretórios?

A solução vem com o find. Ao contrário do que eu pensava, o parametro name, serve bem para isto.

Siga o exemplo:

  $ cd /tmp            # va para uma area traquila
  $ mkdir tst; cd tst  # crie uma região limpa e entre nela
  $ touch a b c d      # crie quatro arquivos
  $ ls                 # veja se estão lá
  a b c d
  $ # busque somente os diretorios  "b" e "d" e inclua no seu archive.cpio
  $ find -name "a" -o -name "c" -o print | cpio -o > archive.cpio

Por partes:

  1. O find busca os nomes a ou c caso contrario, IMPRIME na saída e o cpio faz o resto.

  2. A dica aqui é buscar justamente o que se quer evitar dentro do archive. O find gera as listas baseada no print e não no que foi finded (encontrado), como o senso comum nos levaria a crer.

  3. No lugar do a e c, use os nomes de arquivo e de diretórios que você deseje encontrar de fato

    Se usarmos nomes de diretórios e a cláusula -prune (logo após o nome do diretório), eliminamos o diretório e todo o seu conteúdo (da lista!).

    ==Ex 2 - (mais complexo):==
      $ cd /tmp/tst    # vá para a mesma area traquila
      $ ls             # veja se seus arquivos estão lá
      a b c d
      
      $ mkdir -p pasta/{e,f} # crie um diretorio novo com 2 novos subdiretorios
      $ find           # veja o conteúdo
      .
      ./a
      ./d
      ./c
      ./b
      ./pasta
      ./pasta/f
      ./pasta/e
      
      $ # busque somente os diretorios  "b" e "d" e exclua a pasta "e", existente no subdir "pasta"
      $ find -name "a" \
           -o -name "c" \
           -o -name "e" -prune \
           -o -print | cpio -o > archive.cpio
      $ cpio -t < archive.cpio # liste o conteudo do novo archive
      .
      d
      b
      pasta
      pasta/f
      archive.cpio
      1 block
    
    Perceba que a pasta e (e todo o conteudo se houvesse ) ficou de fora assim como os arquvios a e c

Visite o meu blog: http://marzvix.wordpress.com

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Márcio C. M. Rezende