
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...