for i in *; do mkdir "$i.extracted"; (cd "$i.extracted" && 7z x "../$i") || echo "Error with $i"; done
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?
for i in *; do mkdir "$i.extracted"; (cd "$i.extracted" && 7z x "../$i") || echo "Error with $i"; done
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.
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.