Compacte todos os arquivos em um diretório em seu próprio arquivo compactado

20

Como faço para compactar todos os arquivos em um diretório em seu próprio tar, preservando o nome de cada arquivo?

i.e. file1.out file2.out

- >

file1.out.tar.gz file2.out.tar.gz

    
por DD. 05.02.2012 / 21:12

3 respostas

55

Colocar todos os arquivos em um arquivo tar separado não faz sentido nesse cenário. Você pode usar gzip para compactá-los diretamente:

gzip *

resultará em file1.out.gz , file2.out.gz etc.

Você usaria tar apenas se precisasse de um arquivo compactado como um único arquivo.

Se você precisa de um arquivo tar para cada arquivo, você pode criá-lo da seguinte forma:

for i in *; do tar -czf $i.tar.gz $i; done
    
por 05.02.2012 / 21:18
9

Para construir a resposta do @SvenW (que funcionará apenas no diretório atual), se você tiver um grande número de arquivos ou quiser fazer isso em uma estrutura de diretórios recursiva, também poderá usar

find . -type f -exec gzip \{\} \;

e se você precisar colocar a saída em um diretório diferente (neste exemplo, ../target ) e não quiser remover os originais, poderá fazer algo como:

find . -type f -print | while read fname ; do
    mkdir -p "../target/'dirname \"$fname\"'"
    gzip -c "$fname" > "../target/$fname.gz"
done
    
por 06.02.2012 / 03:07
0

Tente este:

#!/bin/bash
for fich in *; do
    if [ "$fich" != "*" ] ; then
        gzip -9 -c $fich > $fich.tar.gz
        \mv $fich.tar.gz $fich
    fi
done
    
por 16.09.2018 / 20:51

Tags