Я новичок в Linux и мало знаю о командах linux.
Мой сценарий заключается в том, что у меня так много исходных файлов java с различным именем пакета в каталоге.
Я хочу перенести все эти исходные файлы java в их соответствующий каталог пакетов.
В любом исходном файле java первая строка - это оператор пакета, который может быть или не быть прецедентом комментария.
Так что я хочу написать сценарий оболочки, который анализирует строку пакета для всех .java-файлов в текущем каталоге, а затем перемещает этот Java-файл в соответствующий каталог пакета.
Текущая ситуация: [ ! d5] 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");
}
}
Вот версия 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. Меня просто интересовало, как это может выглядеть. Версия bash на основе regex из ответа @ RoVo должна быть в порядке.
Вот версия 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. Меня просто интересовало, как это может выглядеть. Версия bash на основе regex из ответа @ RoVo должна быть в порядке.
Вот версия 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. Меня просто интересовало, как это может выглядеть. Версия bash на основе regex из ответа @ RoVo должна быть в порядке.