Aqui está uma versão em 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)
Ele usa o analisador javalang
, para analisar o código-fonte Java.
Eu estava apenas interessado em como isso pode parecer. A versão bash baseada em regex da @ resposta do RoVo deve ser boa.