Linux 符号链接(symbolic link)目录中的所有文件都添加了 '*'

标签 linux bash symlink

<分区>

我正在尝试将目录中的所有文件符号链接(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/

相关文章:

c - binutils/bfd.h 现在想要 config.h 吗?

linux - Linux 启动/关闭时的日志脚本

linux - 什么是适合初学者内核开发的准系统 Linux 发行版?

.net - 在 linux 和 apache 上的同一个 EC2 中运行多个 dotnet api 的项目

Bash bool 测试

bash - 运行命令的模式扩展

c - execv 的缓冲区大小

linux - 创建带有子目录的符号链接(symbolic link)

linux - 是否可以在同一 SVN 存储库的不同目录中建立从文件 A 到文件 B 的链接?

c# - 通过网络进行命令行控制