私はLinuxを初めて使用し、Linuxコマンドについてはあまり知りません。
私のシナリオでは、ディレクトリに
パッケージ名が異なるJavaソースファイルがたくさんあります。
これらすべてのJavaソースファイルをそれぞれのパッケージ
ディレクトリに移動したい。
どのJavaソースファイルでも、最初の行はパッケージステートメントであり、
コメントが前に付いている場合と付いていない場合があります。
したがって、私が必要としているのは、現在のディレクトリにあるすべての.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");
}
}
承認された回答:
#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