Como recursivamente bzip2 todos os arquivos que não são bzipados?

7

Como posso recursivamente bzip2 todos os arquivos que não terminam com a extensão .bz2 no Linux?

    
por Alon Gubkin 14.08.2010 / 14:41

4 respostas

8

encontre seu amigo. Eu acho que o seguinte deve fazer isso:

find <target_dir> -not -name \*.bz2 -exec bzip2 \{\} \;

i.e. se o diretório onde os arquivos que você deseja usar o bzip for / var / log / blah, ele será:

find /var/log/blah -not -name \*.bz2 -exec bzip2 \{\} \;
    
por 14.08.2010 / 14:50
1

Off the top of my head (desculpe, não tenha um shell útil para testar citações, etc.):

for _t in 'find . -print |grep -v -E "\.bz$"'; do bzip2 -9 $_t && echo OK $_t || echo FAIL $_t; done

Isto usa o find para encontrar todos os arquivos, grep para remover aqueles com uma extensão .bz2 e depois alimentá-los um de cada vez no bzip2. Eu espero que algumas das citações estejam erradas, no entanto - eu testaria o bit nas backcotes separadamente primeiro.

Boa sorte! Você pode querer usar o xz no entanto, - normalmente comprime melhor - ou até mesmo extrair tudo e bzip2 ou xz.

    
por 14.08.2010 / 14:49
1

Com zsh ( setopt extended_glob deve estar ativado):

bzip2 **/^*.bz2(.)

** recurses em subdiretórios; ^*.bz2 corresponde a tudo, exceto *.bz2 ; (.) se restringe a arquivos regulares.

Com o bash 4, se você estiver certo em ignorar bzip2 se queixa de ser invocado em diretórios:

bzip2 **/!(*.bz2)
    
por 14.08.2010 / 15:08
0

Aqui está um forro. Se necessário, instale ifne primeiro. No Ubuntu:

sudo apt-get install moreutils

E então:

find YOUR_DIR -type f -not -name \*.bz2 -print0 | ifne xargs -0 bzip2

Isso faz o mesmo que outras respostas, mas você não receberá mensagens de aviso sobre diretórios bzip2ing, e se não houver mais nada para bzip2 , você não receberá mensagens de aviso sobre dados compactados bzip2ing em um terminal. Ele também usa xargs etc.

YOUR_DIR pode ter curingas ou vários dirs, por exemplo, SEU * DIR ou algo parecido.

    
por 30.07.2014 / 16:51