获取目录中每个类的完全限定名的Linux命令

ufj5ltwl  于 2023-08-03  发布在  Linux
关注(0)|答案(3)|浏览(109)

我有一个文件目录结构如下:

src \
    SortGreater \
           SortGreater.java
           SortGreater.class
    SortLess \
           SortLess.java
           SortLess.class

字符串
我打算编写一个Linux命令,输出“src”目录中每个类的完全限定名(假设我在“src”目录中运行该命令)。例如,该命令应在此处输出“SortGreater.SortGreater”和“SortLess.SortLess”。我的第一次尝试是命令find -type f -name "*.java" -exec readlink -f {} \;,但这被证明是错误的,因为它输出/path/to/directory/src/SortGreater/SortGreater.java/path/to/directory/src/SortLess/SortLess.java
有什么建议吗

dw1jzc5e

dw1jzc5e1#

查找所有.class(或.java)文件,将斜线更改为点,修剪:

find -name '*.class' | sed 's~/~.~g; s/.class$//; s/..//'

字符串

hxzsmxv2

hxzsmxv22#

让我们使用find-exec选项和一个bash函数(to_qual),该函数接受一个参数,删除尾随的.java和前导的./,用.替换所有的/,并打印结果。

$ cd src
$ to_qual() { f="${1%.*}"; f="${f#./}"; printf "%s\n" "${f////.}"; }
$ export -f to_qual
$ find -type f -name '*.java' -exec bash -c 'to_qual "$1"' _ {} \;
SortGreater.SortGreater
SortLess.SortLess

字符串

093gszye

093gszye3#

bash

for i in */*.class; do dir="${i/\/*}"; echo "$dir.$dir"; done

字符串
输出量:

SortGreater.SortGreater
SortLess.SortLess


${i/\/*}输出字符串i删除/和所有以下

相关问题