Soy nuevo en Linux y no sé mucho sobre los comandos de Linux.
Mi escenario es que tengo tantos archivos fuente de Java con diferentes
nombres de paquetes en un directorio.
Quiero mover todos estos archivos fuente de Java a su respectivo paquete
directorio.
En cualquier archivo fuente Java, la primera línea es la declaración del paquete, que puede
o no estar precedida por un comentario.
Entonces, lo que quiero es escribir un script de shell que analice la línea del paquete para
todos los archivos .java en el directorio actual y luego mueva ese archivo java a
su respectivo directorio de paquetes.
Situación actual:
directory1
|- Class1.java (package : com.pkgA)
|- Class2.java (package : com.pkgB)
|- Class3.java (package : com.pkgC.subpkg)
Lo que quiero:
directory1
|- src
|- com
|- pkgA
|- Class1.java
|- pkgB
|- Class2.java
|- pkgC
|- subpkg
|- Class3.java
Ejemplo de archivo fuente:
//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");
}
}
Respuesta aceptada:
#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