Extraindo vários tipos de arquivos ao ignorar erros

2

Informações do sistema:

aggitan@moneque:~$ uname -a
Linux moneque 2.6.32-25-generic #44-Ubuntu SMP Fri Sep 17 20:05:27 UTC 2010 x86_64 GNU/Linux

aggitan@moneque:~$ 7z

7-Zip 9.04 beta  Copyright (c) 1999-2009 Igor Pavlov  2009-05-30
p7zip Version 9.04 (locale=en_US.utf8,Utf16=on,HugeFiles=on,2 CPUs)

Eu tenho uma pasta que tem 68 arquivos que variam de .rar, .ace e & amp; .zip.

Eu quero extrair todos esses arquivos usando o nome da pasta como o primeiro diretório ("Extrair aqui")

Se eu usar o file-roller para o primeiro erro, não parece haver um sinalizador "ignorar erro" para o rolo de arquivo.

Se eu usar o 7zip, ele despejará tudo na pasta atual e não usará pastas limpas

Como posso extrair tudo em pastas separadas sem derramar tudo no diretório atual?

    
por aggitan 18.10.2010 / 13:37

3 respostas

4

for i in *; do mkdir "$i.extracted"; (cd "$i.extracted" && 7z x "../$i") || echo "Error with $i"; done

    
por Tobias Kienzler 18.10.2010 / 14:47
3

Não tenho conhecimento de nenhuma solução direta, mas com um pequeno loop bash você pode fazê-lo em um terminal (se, como sua pergunta parece sugerir, o 7zip é capaz de fazer tudo o que você quiser exceto extrair em uma pasta no nome do arquivo). Tente (no diretório com os arquivos):

for FILE in *.*; do DIR=${FILE%.*}; mkdir $DIR && 7z x -o$DIR $FILE ; done

O ${FILE%.*} extrai o nome do arquivo sem a extensão.

    
por Marcel Stimberg 18.10.2010 / 14:48
3

Um pequeno script de shell pode vir para o resgate.

#! /bin/bash

for archive in "$@"; do (
    archive_dir="$(cd $(dirname "$archive"); pwd -P)"
    archive_name="$(basename "$archive")"
    # make a directory by appending '.d' to the archive file name
    name="${archive_name}.d"
    mkdir -p "$name"
    cd "$name"
    # extract contents with full path, 
    # replace 'x' with 'e' to extract into $name directory
    7z x "${archive_dir}/${archive_name}"
); done

Cole o acima em um arquivo extract.sh (no diretório onde você deseja extrair arquivos) e, em seguida, torná-lo executável:

chmod +x ./extract.sh

O script cria um diretório para cada arquivo fornecido no comando linha adicionando .d ao nome do arquivo (por exemplo, para um arquivo stuff.zip criará o diretório stuff.zip.d ) e, em seguida, extrai arquivos do arquivo para ele.

Você pode invocá-lo em um terminal como este (use curingas para extrair vários arquivos de uma só vez):

./extract.sh stuff.zip stuff2.rar

Disclaimer: não testado, então experimente com um ou dois arquivos de amostra antes de fazer a grande corrida.

    
por Riccardo Murri 18.10.2010 / 14:50