我意识到这很老了,但是当我正在寻找类似问题的解决方案时,它是Google上的热门产品之一,因此我将在此处发布我的工作。我的场景略有不同,因为我基本上只是想完全炸开一个jar以及其中包含的所有jar,所以我编写了以下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"
}
请注意,<file-where-this-function-is-stored>
如果要将其存储在一个文件中,这是必需的,因为我碰巧要为非交互式shell读取该文件。如果将函数存储在非交互式shell上加载的文件中(例如,.bashrc
我相信),则可以删除整个source
语句。希望这会对某人有所帮助。
有点警告-explodeFile
也会删除压缩文件,您当然可以通过注释掉最后一行来更改它。