Me doy cuenta de que esto es muy antiguo, pero fue uno de los primeros éxitos en Google cuando estaba buscando una solución para algo similar, así que publicaré lo que hice aquí. Mi situación es un poco diferente, ya que básicamente sólo quería explotar plenamente un frasco, junto con todos los frascos contenidos en ella, así que escribió las siguientes funciones bash:
function explode {
local target="$1"
echo "Exploding $target."
if [ -f "$target" ] ; then
explodeFile "$target"
elif [ -d "$target" ] ; then
while [ "$(find "$target" -type f -regextype posix-egrep -iregex ".*\.(zip|jar|ear|war|sar)")" != "" ] ; do
find "$target" -type f -regextype posix-egrep -iregex ".*\.(zip|jar|ear|war|sar)" -exec bash -c 'source "<file-where-this-function-is-stored>" ; explode "{}"' \;
done
else
echo "Could not find $target."
fi
}
function explodeFile {
local target="$1"
echo "Exploding file $target."
mv "$target" "$target.tmp"
unzip -q "$target.tmp" -d "$target"
rm "$target.tmp"
}
Nota del <file-where-this-function-is-stored>
que se necesita si usted está almacenando esto en un archivo que no se lee para un shell no interactivo como sucedía. Si está almacenando las funciones en un archivo cargado en shells no interactivos (por ejemplo, .bashrc
, creo), puede soltar toda la declaración source
. Espero que esto ayude a alguien.
Una pequeña advertencia - explodeFile
también borra el archivo ziped; por supuesto, puede cambiar eso comentando la última línea.
¿Qué hay de archivos largos caminos ... más allá de los 260 caracteres ...: https://superuser.com/a/1263234/439537 – Andrew