简短结论:Linux 的软链接(symbolic link)本身不支持通配符( ? 等)展开*。
下面详细说明:
软链接本质上是一个特殊的文件,里面保存的是目标路径字符串。
例如:
ln -s /data/logs/*.log /tmp/loglink
实际创建的是:
/tmp/loglink -> /data/logs/*.log
注意:.log 前面的 * 不会被展开,它只是普通字符。
当你访问 /tmp/loglink 时,系统会去找一个名为 *.log 的文件,通常不存在,于是报错。
❌ 想用一个软链接匹配多个文件:
ln -s /var/log/app_*.log ~/logs
→ 不行,只会创建一个指向字面量 app_*.log 的链接
for f in /data/logs/*.log; do
ln -s "$f" /tmp/
done
如果目标是“访问某个目录下所有内容”:
ln -s /data/logs /tmp/logs
然后访问:
ls /tmp/logs/*.log
这里通配由 shell 展开。
mount --bind /data/logs /mnt/logs
(需要 root)
| 问题 | 答案 |
|---|---|
软链接支持 * 吗 |
❌ 不支持 |
* 会展开吗 |
❌ 不会 |
| 一个软链接能指向多个文件吗 | ❌ 不能 |
| 通配应在哪做 | ✅ shell / 脚本 |
如果你有具体使用场景(比如日志、配置、容器挂载),我可以给你更合适的方案。