tar em paralelo [duplicado]

1

Eu tenho um diretório com várias centenas de subdiretórios. Eu quero tar e comprimir cada subdiretório e nomear o arquivo resultante <currentDirName>.tar.bz2 .

Eu fiz:

find ./dir -type f -print0 | xargs -0 -n1 -P100 bunzip2

para descomprimir 100 arquivos de uma só vez. (Eu faço modelagem oceânica, então minha máquina é bastante poderosa com muitos núcleos quádruplos.) Eu não sei como fazer algo parecido com o anterior, incluindo informações sobre como nomear o arquivo comprimido imediatamente. Eu não quero fazer tar cfj dir.tar.bz2 dir para cada um.

Posso fazer isso com cada nome de diretório sendo usado automaticamente como o nome do arquivo tar - via find ou parallel para que 100 ou mais possam ser feitos por vez, como no comando bunzip acima?

Obrigado pela contribuição.

.... Peter

    
por user2592248 21.07.2015 / 18:22

1 resposta

1

O seguinte bash one-liner fará aproximadamente o que você descreve, colocando cada diretório em seu próprio tarball.

for d in dir/*/; do { tar -cj "$d" > "${d%/}.tar.bz2" ; } & done ; while [ "$(jobs)" ] ; do fg &>/dev/null ; done ; echo done
    
por 21.07.2015 / 19:38