Je suis nouveau sur Linux et je ne connais pas grand-chose aux commandes Linux.
Mon scénario est que j'ai tellement de fichiers source Java avec différents
noms de packages dans un répertoire.
Je souhaite déplacer tous ces fichiers source Java vers leur répertoire de package
respectif.
Dans tout fichier source Java, la première ligne est l'instruction package, qui peut
ou non être précédée d'un commentaire.
Donc, ce que je veux, c'est écrire un script shell qui analyse la ligne de package pour
tous les fichiers .java du répertoire courant, puis déplace ce fichier java dans
son répertoire de package respectif.
Situation actuelle :
directory1
|- Class1.java (package : com.pkgA)
|- Class2.java (package : com.pkgB)
|- Class3.java (package : com.pkgC.subpkg)
Ce que je veux :
directory1
|- src
|- com
|- pkgA
|- Class1.java
|- pkgB
|- Class2.java
|- pkgC
|- subpkg
|- Class3.java
Exemple de fichier source :
//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");
}
}
Réponse acceptée :
#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