如何将所有 java 源文件移动到它们各自的包目录?

如何将所有 java 源文件移动到它们各自的包目录?

我是Linux新手,对Linux命令了解不多。

我的情况是,我在一个目录中有许多具有不同包名的 java 源文件。

我想将所有这些 java 源文件移动到它们各自的包目录中。

在任何 java 源文件中,第一行都是包语句,其前面可能有或可能没有注释。

所以我想要编写一个 shell 脚本,解析当前目录中所有 .java 文件的包行,然后将该 java 文件移动到其各自的包目录中。

现在的情况:

directory1
|- Class1.java (package : com.pkgA)
|- Class2.java (package : com.pkgB)
|- Class3.java (package : com.pkgC.subpkg)

我想要的是:

directory1
|- src
   |- com
      |- pkgA
         |- Class1.java
      |- pkgB
         |- Class2.java
      |- pkgC
         |- subpkg
            |- Class3.java

示例源文件:

//This is single line comment
/* This is multi line comment
 * Any of these style comment may or may not be present
 */

package com.pkgA;

public class Class1 {
    public static void main(String[] args) {
        System.out.println("Hello");    
    }
}

答案1

#Loop through the java files
for f in *.java; do

    # Get the package name (com.pkgX)
    package=$(grep -m 1 -Po "(?<=^package )[^; ]*" "$f")

    # Replace . with / and add src/ at the beginning
    target_folder="src/${package//./\/}"

    # Create the target folder
    mkdir -p "$target_folder"

    # move the file to the target folder
    mv "$f" "$target_folder"

done

答案2

以下是 Python 版本:

#!/usr/bin/env python3
from pathlib import Path
from javalang.parse import parse  # $ pip install javalang

for java_src_path in Path().glob('*.java'):
    tree = parse(java_src_path.read_text())
    package_path = Path('src', *tree.package.name.split('.'))
    package_path.mkdir(parents=True, exist_ok=True)
    java_src_path.replace(package_path / java_src_path.name)

它用javalang解析器,用于解析 Java 源代码。我只是想知道它看起来是什么样子。@RoVo 的回答应该没事。

相关内容