Mir ist klar, dass das sehr alt ist, aber es war einer der ersten Hits bei Google, als ich nach einer Lösung für etwas Ähnliches suchte, also poste ich, was ich hier gemacht habe. Mein Szenario ist etwas anders als ich im Grunde wollte nur voll ein Glas zu explodieren, zusammen mit allen Gläsern in ihr enthalten, also schrieb ich folgende bash Funktionen:
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"
}
Hinweis der <file-where-this-function-is-stored>
, die benötigt wird, wenn Sie speichern dies in einer Datei, die nicht für eine nicht interaktive Shell gelesen wird, wie ich es gerade war. Wenn Sie die Funktionen in einer Datei speichern, die auf nicht interaktiven Shells geladen ist (z. B. .bashrc
, glaube ich), können Sie die gesamte source
-Anweisung löschen. Hoffentlich wird das jemandem helfen.
Eine kleine Warnung - explodeFile
löscht auch die ziped Datei, Sie können das natürlich ändern, indem Sie die letzte Zeile auskommentieren.
Wie wäre es mit langen Dateipfaden ... mehr als 260 Zeichen ...: https://superuser.com/a/1263234/439537 – Andrew