Tar - exclui todos os arquivos na subpasta, mas não nas pastas aninhadas

1

Eu preciso criar um arquivo .tgz da seguinte pasta

pack
  |
  rest
    |
    vendor (folder)
    |
    ----index.php
    |
    ----info.log
    | 
    another (folder)
    |
    ---index.php
    |
    ---info.log
    |
    ---somefile.someext 
   |
   somefolder1
   |
   somefoldern
   |
   somefiles.somexts

Apenas a emissão de um exclude=index.php etc tem consequências indesejadas: o fornecedor pode ter um arquivo com esse nome diretamente ou em uma de suas subpastas. Eu não consegui estabelecer a partir da documentação se eu posso instruir o tar para ignorar todo o conteúdo do arquivo na pasta de descanso, mas NÃO as sub pastas sob ele.

    
por DroidOS 26.06.2015 / 06:47

2 respostas

0

Use apenas " another/index.php " como padrão (ou mesmo " rest/another/index.php "):

$ mkdir -p pack/rest/vendor
$ mkdir -p pack/rest/another
$ touch pack/rest/{vendor,another}/index.php
$ tar --create --verbose --file  xx.tar --exclude "another/index.php"  pack/
pack/
pack/rest/
pack/rest/another/
pack/rest/vendor/
pack/rest/vendor/index.php

Descobri que para seleções mais complexas do conteúdo do arquivo tar é mais fácil usar find com a remoção, e, ou, etc., e até que você possa gerar a lista exata de entrada. E, em seguida, canalize isso para cpio e seu modo de saída --format=ustar para gerar um arquivo tar.

    
por 26.06.2015 / 07:22
0

Para o benefício daqueles que estão neste post aqui está a solução que funciona - pelo menos no Ubuntu 14.04. Para a estrutura de pastas que mostrei acima,

tar -zcf pack.tgz --exclude-from=/path/to/excludes.list pack

excludes.list contém, no meu caso

rest/index.php
rest/info.log
rest/filetoexclude.ext

... essencialmente, uma lista de arquivos a serem excluídos. Pontos a serem observados

  • O uso de um caminho absoluto para o arquivo excludes.list facilita a composição do comando para criar o archive por meio de um comando shell executado em uma linguagem de script.
  • Os arquivos excluídos estão no formato folder/file.ext , relative para a pasta que está sendo arquivada.
  • Deve haver um caractere de nova linha imediatamente após cada entrada de nome de arquivo. Em um editor de texto, é fácil obter um espaço logo após o nome do arquivo e, nesse caso, ele não será ignorado.
por 26.06.2015 / 14:47

Tags