符号链接无法关联隐藏文件:如何将文件夹内容链接至public_html?
如何将/site/web/的所有文件(含隐藏文件)链接到/public_html/
我来帮你搞定这个符号链接的问题!你遇到的情况其实是shell通配符的默认行为导致的,这里有两个靠谱的解决方案:
方案一:分两次链接(显式处理隐藏文件)
先链接普通文件,再专门匹配并链接隐藏文件(同时避开.和..这两个特殊目录):
# 链接所有普通文件 ln -s ~/site/web/* ~/public_html/ # 链接所有隐藏文件(排除.和..) ln -s ~/site/web/.[!.]* ~/public_html/
这里的.[!.]*是关键:它会匹配所有以.开头、且第二个字符不是.的文件/目录,完美避开了当前目录(.)和父目录(..),不会创建多余的无效链接。
方案二:开启dotglob匹配隐藏文件(一次完成)
bash有个dotglob选项,开启后通配符*会包含所有以.开头的文件(同样自动排除.和..),这样你只需要一条命令就能搞定:
# 开启dotglob选项 shopt -s dotglob # 一次性链接所有文件(含隐藏文件) ln -s ~/site/web/* ~/public_html/ # 可选:关闭dotglob恢复默认行为(避免影响后续命令) shopt -u dotglob
这个方法更简洁,适合不想敲两条命令的场景。
为什么你之前的命令不行?
- 用
ln -s ~/site/web/* ~/public_html/时,默认情况下bash的*通配符不会匹配以.开头的文件,所以隐藏文件(比如.htaccess)被漏掉了。 - 用
ln -s ~/site/web/ ~/public_html/时,你是把整个web目录链接到了public_html里,相当于在public_html下创建了一个指向web的符号链接,所以文件路径会变成public_html/web/xxx,不符合你要把文件直接放在public_html根目录的需求。
内容的提问来源于stack exchange,提问作者Dan




