我正在尝试反编译某个目录中包含的所有Java类,从该目录的顶部开始。
该目录有许多子目录,每个子目录的深度都不同。
我要做的是进入每个目录,如果内容是带有后缀的文件.class
,请运行decompiler命令,该命令将在同一目录中创建一个反编译的文件。
我已经尝试了以下方法,但是他们并没有达到我的目标。
第一种方法是:
for dir in ./*; do ( ( if [[ -d $dir ]]; then cd "$dir"; fi ) && ( for f in "$dir"; do ( if [[ -f $f && $f == *".class"* ]]; then jad "$f"; fi ); done ) ); done
这里的问题是它不是递归的。也许可以以一种递归的方式对其进行调整?
第二种方法简单得多,但是它在顶层目录中输出文件。虽然这可能没问题,但是不幸的是,我有相同名称的类,但是它们的包不同,所以该解决方案也不起作用:
find . -type f -name "*.class" | while read filename; do echo $filename; done
可以对其中之一进行调整以实现我想要的吗?如何将第一个命令转换为递归操作?
我想出了一个对我有用的解决方案:
find . -type d | while read dir; do ( if [[ -d $dir ]]; then cd $dir && find . -maxdepth 1 -type f | while read f; do ( jad $f ); done fi ); done
不需要if
语句来检查文件的正确类型,因为如果文件不是类文件,jad将不会执行反编译。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句