我想创建一个带有通配符的符号链接:
ln -s jetty_server01.file jetty_*.file
因此,对名为 的文件的所有请求jetty_*.file
都将链接到jetty_server01.file
同一目录中的 target 。
那可能吗?
使用 CentOS 7。
答案1
不,文件系统不是这样工作的。文件系统存储现存的文件名,不是潜在的文件名。
“ *
”表示“通配符”,是 shell 的一项功能,通过将目录中的所有现有文件名与您指定的模式进行匹配来完成文件名。当您在程序中打开文件时,不会发生这种情况。
如果您想要这样的东西,您将必须实现自己的文件系统,或者为每个实际的潜在文件名创建一个链接。
答案2
是的...,您可以创建名称中带有星号的符号链接。
如果您引用第二个文件名(带星号的文件名),您给出的命令就会执行此操作。
$ ln -s jetty_server01.file 'jetty_*.file'
$ ls -l jetty_\*.file
lrwxrwxrwx 1 ilkkachu ilkkachu 19 Jan 12 19:56 jetty_*.file -> jetty_server01.file
但是,这可能不是很有用...每次使用它时都必须引用文件名,因为仅jetty_*.file
在 shell 中使用就会扩展到所有匹配的文件名,包括jetty_*.file
和jetty_server01.file
:
$ ls jetty_*.file
jetty_server01.file jetty_*.file@
存在的确切名称的文件不会阻止 glob 与其他文件匹配。
如果您想要链接到例如最新的一组文件,则将其命名为类似jetty_current.file
或其他名称可能会更容易且更不易混淆。当然,您必须手动更新链接。
(除了 shell 之外的其他程序可能不会扩展 glob,因此您可以jetty_*.file
在配置文件等中使用。但这也可能有点令人困惑。)