Remova os subdiretórios / subpasta dos arquivos zip + rar

2

Eu tenho um monte de arquivos .zip e .rar. Muitos desses arquivos contêm subpastas no arquivo. Eu quero remover todas as pastas dos arquivos zip, mas manter o outro conteúdo.

por exemplo,

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /foo/bar3.jpg
- /foo/bar4.jpg

>>>

new.zip
- bar1.jpg 
- bar2.jpg
- bar3.jpg
- bar4.jpg

Isso pode ser um comando de terminal puro ou um script bash. Eu preciso ser capaz de executá-lo em centenas de arquivos zip / rar de uma só vez.

update: Isso não parece ser possível sem recriar os zips + rars.

Então eu escrevi um pequeno script bash, ele cria dois dirs, "limpos" para arquivos pós-processados e "temp" para os arquivos descompactados. Ele percorre todos os arquivos no diretório atual (arquivos .cbr e .cbz), cria um "nome limpo" para cada novo arquivo, descompacta o arquivo antigo para o diretório temporário, cria um novo archive a partir dos arquivos temporários e o salva com o nome limpo no diretório "limpo" e, em seguida, limpa a pasta temporária. depois que todos os arquivos são processados, o diretório "temp" é recursivamente removido. aqui está o que parece:

#!/bin/bash
echo "comic cleaning!";
echo "---------------";
dir=$(pwd)/;
tmp=${dir}temp/;
clean=$(pwd)/cleaned;
cd $dir;
mkdir -p cleaned;
mkdir -p temp;
for z in *.cb*; do 
  cd $dir;
  filename=$(basename "$z");
  rawname="${filename%.*}";
  name="${rawname// /_}";
  7z e "$dir$z" -otemp/;
  cd $tmp && zip -r $clean/$name.cbz *.jpg;
  cd $tmp && rm *.*;
done
cd $dir && rm -rf $tmp;

Eu provavelmente deveria estar usando o diretório os / tmp, mas ainda sou novo no bash e não consegui fazê-lo funcionar. Alguma sugestão para otimizá-lo?

    
por xero 02.12.2013 / 17:34

1 resposta

2

Seu pequeno script pode funcionar se todos os nomes de arquivos forem exclusivos. Você terá alguma condição como essa?

original.zip
- /foo/bar1.jpg 
- /foo/bar2.jpg
- /zoo/bar1.jpg
- /zoo/bar2.jpg

Você vai sobrescrever arquivos. Uma solução melhor talvez para colocar o caminho completo como parte do seu novo nome de arquivo. Ex:

foobar1.jpg foobar2.jpg zoobar1.jpg zoobar2.jpg

Mas com isso, você perderá o nome do arquivo original.

Apenas alguns pensamentos ...

    
por 02.12.2013 / 22:49