<分区>
我正在尝试将目录中的所有文件符号链接(symbolic link)到目标目录,方法是:
ln -s /directory/* /target-directory
问题是当我进入目标目录时,我看到这个“*”,引号中的星号,而不是第一个目录中的所有文件。我究竟做错了什么?谢谢。
<分区>
我正在尝试将目录中的所有文件符号链接(symbolic link)到目标目录,方法是:
ln -s /directory/* /target-directory
问题是当我进入目标目录时,我看到这个“*”,引号中的星号,而不是第一个目录中的所有文件。我究竟做错了什么?谢谢。
最佳答案
通常,当您运行 ln -s/directory/*/target-directory
时,shell 会将 /directory/*
展开为一个列表/directory/中的(当前存在的,可见的)文件,然后将其传递给参数列表中的 ln
。结果将等同于 ln -s/directory/file1.txt/directory/file3.pdf/directory/file3.c/target-directory
。请注意,ln
命令不会看到“*”,因此不会将其包含在链接源或目标名称中。
由于“*”用作链接名称,因此不会展开。发生这种情况的原因有几个:
您可能设置了 noglob
shell 选项。但是你在评论中说不是这样的。
shell 扩展可能没有匹配任何文件,在这种情况下,shell 会简单地将它原封不动地传递给 ln
,给出您描述的结果。你说你在源目录下创建了一个文件,但是你这样做之后有没有重新测试?另一种可能性是目录路径中存在拼写错误,因此找不到匹配的目录(更不用说其中的任何文件了)。
哦,还有一点要注意:你说当你转到目标目录时,你会看到一个星号在引号中。你到底怎么样?因为如果您只是使用 ls
,它不应该在列表中包含引号,除非它们实际上是文件名的一部分。 [编辑:Mark Plotnick 指出某些版本的 GNU ls
do 向某些文件名添加引号。] 我不知道您提供的命令如何向文件名添加引号.
关于Linux 符号链接(symbolic link)目录中的所有文件都添加了 '*',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167386/