如何在find命令中仅获取basename?不使用basename或printf
在find命令中获取文件名(basename)并用于后续操作的替代方案
你可以通过在-exec里调用shell脚本的方式,直接提取文件名并传递给后续命令,避开你排除的两种方法:
find . -type f -exec sh -c ' for file do base=$(basename "$file") find /home -type l -name "*$base*" done ' sh {} +
说明:
- 用
-exec sh -c启动一个shell进程,{} +会把find找到的所有文件批量传递给shell,比逐个处理({} \;)更高效 - 在shell循环里,通过
basename "$file"提取每个文件的纯文件名(不带路径) - 把提取到的
$base变量传给第二个find的-name参数,就能匹配/home目录下名字包含该文件名的符号链接了
这个写法既满足你不使用指定两种方法的要求,又能实现你想要的“用文件名而非完整路径作为后续命令参数”的效果。
内容的提问来源于stack exchange,提问作者Bog
相关产品推荐
相关产品推荐

