find -name "*.c" -exec echo $(basename {}) \;
Run Code Online (Sandbox Code Playgroud)
basename似乎什么都不做.它只返回整个路径.
$(basename {})在find开始之前进行评估:告诉shell使用结果basename {}来构造find命令行.基本上它确实如此:
$(basename {}) 评估为 {}find -name "*.c" -exec echo {} \;find构造所有-exec命令; 例如.echo /path/to/file这就是为什么你只有整个路径.
为了实现你想要的,这是一个例子:
find . -name "*.c" -exec basename {} \;
Run Code Online (Sandbox Code Playgroud)
请注意,我添加了起始路径find,否则它不可移植.
更新:这个答案在下面的评论中显示了@chepner的一个例子.我之前的例子没有任何理由太复杂了.