Como colocar arquivos tar sem extensões?

0

Eu tenho alguns diretórios com um número variável de arquivos e subdiretórios. Todos os arquivos que não possuem extensões devem ser tar ed. Seus nomes podem mudar, assim eles não podem ser codificados. Os subdiretórios também podem conter um número não especificado de arquivos e subdiretórios que não são relevantes e não devem ser incluídos no archive.

Gostaria de poder fazer isso com uma única linha, sem usar nenhum script .sh , para que esse processo pudesse ser reproduzido da maneira mais portável possível.

Exemplo de estrutura de diretório:

$ ls -1F

bar-dir/
bar.with.dots
foo-directory/
foo-no-ext
quux.dir/
quux.ext

O tar resultante deve conter apenas foo-no-ext neste caso.

O mais próximo que eu cheguei até agora é

tar -cf archive.tar --exclude=*.* --no-recursion *

Mas, quando executado no conjunto de amostras, o archive.tar ainda inclui os subdiretórios (embora vazios):

$ tar -tf archive.tar

bar-dir/
foo-directory/
foo-no-ext
    
por U-D13 01.09.2011 / 20:18

2 respostas

3

Este comando faz o que você quer:

 find * -maxdepth 0 -type f | tar -cf archive.tar --exclude=*.* -T -

O comando find localiza todos os arquivos * apenas no diretório atual -maxdepth 0 que são arquivos -type f (não diretórios, dispositivos ou outros arquivos especiais). Os arquivos resultantes são passados para o tar, o que exclui os nomes que contêm um ponto.

    
por 01.09.2011 / 21:31
1

Que tal:

tar -cf archive.tar 'ls|grep "^[^.]*$"'

Ele não espera muito do shell, mas assume que o grep existe (nunca vi um sistema sem ele).

    
por 01.09.2011 / 23:22