Я понимаю, что это очень старый, но это был один из первых хитов в Google, когда я искал решение чего-то подобного, поэтому я опубликую то, что я сделал здесь. Мой сценарий немного отличается, как я в основном просто хотел полностью взорвать банку вместе со всей баночкой, содержащейся в нем, так что я написал следующий Баш функции:
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"
}
Примечания к <file-where-this-function-is-stored>
, которая необходима, если вы храните это в файле, который не читается для неинтерактивной оболочки, каким я оказался. Если вы храните функции в файле, загруженном на неинтерактивные оболочки (например, .bashrc
, я полагаю), вы можете удалить весь оператор source
. Надеюсь, это поможет кому-то.
Небольшое предупреждение - explodeFile
также удаляет ziped-файл, вы можете, конечно, изменить это, комментируя последнюю строку.
Как насчет длинных путей к файлам ... за пределами 260 символов ...: https://superuser.com/a/1263234/439537 – Andrew 2017-10-28 06:13:49