Как перенести все исходные файлы java в соответствующий каталог пакетов?

Я новичок в 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"); } }
6
задан 13 October 2017 в 16:27

6 ответов

[F1]
8
ответ дан 22 May 2018 в 17:35
  • 1
    Его работа отлично, как и ожидалось. Вы - гений. Спасибо .... спасибо ... так много. – Kashyap Kansara 13 October 2017 в 16:07
[F1]
8
ответ дан 18 July 2018 в 05:21
[F1]
8
ответ дан 24 July 2018 в 18:18

Вот версия 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 должна быть в порядке.

1
ответ дан 22 May 2018 в 17:35
  • 1
    Я могу легко найти исходные файлы, которые разбивают код @ RoVo, но должны быть в порядке с вашими, так что это определенно ценное дополнение к этому вопросу. – Jörg W Mittag 14 October 2017 в 09:39

Вот версия 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 должна быть в порядке.

1
ответ дан 18 July 2018 в 05:21

Вот версия 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 должна быть в порядке.

1
ответ дан 24 July 2018 в 18:18
  • 1
    Я могу легко найти исходные файлы, которые разбивают код @ RoVo, но должны быть в порядке с вашими, так что это определенно ценное дополнение к этому вопросу. – Jörg W Mittag 14 October 2017 в 09:39

Другие вопросы по тегам:

Похожие вопросы: