我正在尝试通过执行以下操作将目录中的所有文件符号链接到目标目录:
ln -s /directory/* /target-directory
问题是当我进入目标目录时,我看到这个'*',引号中的星号,而不是第一个目录中的所有文件。我究竟做错了什么?感谢。
答案 0 :(得分:2)
通常,运行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
做为某些文件名添加引号。]我不知道你给出的命令如何为文件名添加引号。
答案 1 :(得分:0)
不要创建目标目录并执行
ln -sd ./source ./destination
答案 2 :(得分:0)
如果设置了failglob选项,如果无法扩展*,则会收到错误消息。
shopt -s failglob