为何使用ln -s结合命令替换$(ls ../*.txt)无法批量创建符号链接?
命令失效原因及解决方法
问题根源
ln -s的语法规则明确:
- 单文件链接:
ln -s 源文件 链接名 - 多文件批量链接:
ln -s 源文件1 源文件2 ... 目标目录
你执行ln -s $(ls ../*.txt)时,shell会把$(ls ../*.txt)的输出展开成一串文件名,比如../foo.txt ../bar.txt ../baz.txt。此时ln会把第一个参数../foo.txt当作源文件,第二个参数../bar.txt当作要创建的链接名——但当前目录下不存在../bar.txt这个路径(它是父目录里的文件),且ln检测到第二个参数不是目录,就会抛出“target '../foo.txt' is not a directory”的错误(报错里的target实际是被误识别的第二个参数)。
本质问题是:你没给ln指定存放所有链接的目标目录,ln误以为你要将每个源文件分别链接到下一个参数对应的路径,但这些路径既不是合法目录也不是有效链接名,直接触发错误。
正确写法
直接让shell展开通配符,指定当前目录作为目标即可:
ln -s ../*.txt .
这里../*.txt会被shell自动展开为父目录下所有.txt文件,最后的.代表当前目录,ln会在当前目录为每个源文件创建同名符号链接,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者olabie
相关产品推荐
相关产品推荐

