create flat tar archive: ignorando todos os pais ao adicionar pastas

3

Eu quero adicionar algumas pastas (recursivamente) a um novo arquivo TAR. Todas as pastas devem estar no nível raiz do arquivo resultante. Existe alguma maneira de adicionar todas as pastas sem seus pais, e sem cd -ing em seus diretórios primeiro e adicioná-los passo a passo?

Considere a seguinte estrutura de diretório

.
├── bar
│   ├── bar-file
│   └── barsub
│       └── barsub-file
└── foo
    ├── foo-file
    └── foosub
        └── foosub-file

Gostaria de adicionar bar e foosub a um arquivo tar.

# add folders with different parents
# could be e.g. /some/foo/foosub and /other/bar as well
$ tar cvf archive.tar bar foo/foosub
a bar
a bar/bar-file
a bar/barsub
a bar/barsub/barsub-file
a foo/foosub
a foo/foosub/foosub-file

mas o que eu queria é

.
├── bar
│   ├── bar-file
│   └── barsub
│       └── barsub-file
└── foosub
    └── foosub-file

Existe alguma maneira fácil de criar um arquivo tar flat ?

    
por muffel 17.07.2015 / 11:32

2 respostas

2

Com o GNU ou o FreeBSD tar, você pode aplicar uma transformação a nomes de arquivos ao adicioná-los a um arquivo (ou ao extraí-los).

tar czf foo.tgz --transform='!^bar/!!' bar/ foo

Portáteis, você pode fazer o mesmo com pax .

pax -w -pe -s'!^bar/!!' foo bar/
    
por 18.07.2015 / 03:08
-1

tar cvf archive.tar bar -C /path/to/foo/ .

    
por 17.07.2015 / 11:50

Tags