Mar*_*ars 6 linux unix java bash command-line
我试图反编译包含在某个目录中的所有 Java 类,从目录的顶部开始。
目录下有很多子目录,每个子目录的深度都不一样。
我想要做的是进入每个目录,如果内容是带有后缀的文件.class
,则运行反编译命令,这将在同一目录中创建一个反编译文件。
我已经尝试了以下但他们没有达到我所追求的。
第一种方法是:
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
Run Code Online (Sandbox Code Playgroud)
这里的问题是它不是递归的。也许这可以以递归的方式进行调整?
第二种方法简单得多,但它输出顶级目录中的文件。虽然这可能没问题,但不幸的是,我有一些具有相同名称但在不同包中的类,因此该解决方案也不起作用:
find . -type f -name "*.class" | while read filename; do echo $filename; done
Run Code Online (Sandbox Code Playgroud)
可以调整其中之一来实现我想要的吗?如何将第一个命令转换为递归操作?
我\xe2\x80\x99ve想出了一个对我有用的解决方案:
\n\nfind . -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\n
Run Code Online (Sandbox Code Playgroud)\n\n无需if
声明即可检查文件类型是否正确,因为如果文件不是类文件,jad 将不会执行反编译。
归档时间: |
|
查看次数: |
3409 次 |
最近记录: |