Eliminar subdirectorios/subcarpetas de archivos zip + rar

Eliminar subdirectorios/subcarpetas de archivos zip + rar

Tengo un montón de archivos .zip y .rar. Muchos de estos archivos contienen subcarpetas en el archivo. Quiero eliminar todas las carpetas de los archivos zip pero conservar el resto del contenido.

p.ej

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

>>>

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

Puede ser un comando de terminal puro o un script bash. Necesito poder ejecutarlo en cientos de archivos zip/rar a la vez.

actualizar: Esto no parece ser posible sin recrear los zips + rars.

Así que escribí un pequeño script bash que crea dos directorios, "limpiados" para los archivos posprocesados ​​y "temperatura" para los archivos descomprimidos. Recorre todos los archivos en el directorio actual (archivos .cbr y .cbz), crea un "nombre limpio" para cada archivo nuevo, descomprime el archivo antiguo en el directorio temporal, crea un nuevo archivo a partir de los archivos temporales y lo guarda. con el nombre limpio en el directorio "limpiado", luego borra la carpeta temporal. una vez procesados ​​todos los archivos, el directorio "temp" se elimina de forma recursiva. así es como se ve:

#!/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;

Probablemente debería usar el directorio os /tmp, pero todavía soy nuevo en bash y no pude hacerlo funcionar. ¿Alguna sugerencia para optimizarlo?

Respuesta1

Su pequeño script puede funcionar si todos los nombres de archivos son únicos. ¿Tendrás alguna condición como esta?

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

Vas a sobrescribir archivos. Quizás una mejor solución sea incluir la ruta completa como parte de su nuevo nombre de archivo. Ex:

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

Pero con esto, perderá el nombre de archivo original.

Sólo algunas reflexiones...

información relacionada