有两个目录foo1
和foo2
.
起初,我通过ln -s foo1 bar
. 之后我想更改符号链接,所以我输入ln -sf foo2 bar
但bar
仍与foo1
. 符号链接foo2
是在foo1
.
我应该怎么输入,当我想要替换foo1
的foo2
?
我在三种环境中进行了测试。
环境:OSX Sierra,Darwin Kernel Version 16.3.0
根本问题:我想在中央存储库中使用一堆 shell 脚本,它们有一个 #!/usr/bin/zsh。在我的 Mac 上,zsh 位于 /bin/zsh 中。
尝试的解决方案:我想创建一个符号链接
ln -s /bin/zsh /usr/bin/zsh
Run Code Online (Sandbox Code Playgroud)
我的用户帐户具有管理员权限,但我不是 root,我不想在这台 Mac 上启用 root 用户。因此我首先做了一个
sudo su
Run Code Online (Sandbox Code Playgroud)
获取具有 root 权限的 shell,然后执行ln命令。但是我仍然收到错误消息ln: /usr/bin/zsh: Operation not allowed。
问题:
为什么我会收到此错误消息?
我需要做什么来创建链接?
有没有更好的方法来实现我最初的目标?请注意,修复 #! 线不是一种选择。
符号链接是保存相对路径的快捷方式:
~/foo? ln -s . ~/bar/foo
~/foo? ls -l ~/bar
total 8
lrwxr-xr-x 1 me me 1B 15 May 14:38 foo -> .
Run Code Online (Sandbox Code Playgroud)
该文件~/bar/foo
是bar
当前目录的符号链接,即它本身
如果我想在另一个目录中创建一个符号链接到我当时所在的目录怎么办?所以在上面的例子中,我在~/foo
,我想创建~/bar/foo
一个符号链接到~/foo
. 当然,我当前的目录可能比 5 个字符长很多,而且可能不太容易输入。
问题与 .shell 脚本有关bash
。
如何使用脚本检查当前目录中的哪些文件是软链接?
如果我使用了错误的术语,当我说soft links 时,我指的是使用ln -s
.
我唯一能想到的是ls -la
作为一个表达式进行评估,并解析它的结果,但这显然不是最好的解决方案。
我可以在 ln 手册页中阅读:
-L, --logical
make hard links to symbolic link references
Run Code Online (Sandbox Code Playgroud)
我在某处阅读了ln -L
可以使用文件系统重新链接已删除但仍处于打开状态的/proc
文件的地方。例如:
ln -L /proc/1234/fd/12 /tmp/my-file
Run Code Online (Sandbox Code Playgroud)
但我得到ENOENT
:没有这样的文件或目录。如果我尝试使用不同的文件系统,则会得到无效的跨设备链接。
如果我不能ln -L
用来恢复已删除的文件,那么它可以用来做什么?
我试图ln
在目录中调用~/download
:
ln -s ./abc ~/abc [EDITED]
Run Code Online (Sandbox Code Playgroud)
但它不起作用。
我ls -al
在家里做的,得到了错误的链接abc
。
ln [OPTION]... [-T] TARGET LINK_NAME (1st form)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:是否ln
需要目标的完整路径?我在man
页面中没有找到任何文档或提示。如果是这样,我可以从哪里获得更多信息。
我想为文件创建一个简单的符号链接。
如果我从要创建符号链接的目录中运行命令,它会完美运行:
/path/to/link $ ln -s /path/to/file .
Run Code Online (Sandbox Code Playgroud)
但是如果我在任何其他目录中,它每次都会创建一个断开的链接:
/any/other/path $ ln -s /path/to/file /path/to/link
Run Code Online (Sandbox Code Playgroud)
是否ln -s
要求您位于某个目录中,还是我遗漏了什么?运行 Ubuntu 10.04。
更新:对于路径是相对路径还是绝对路径的混淆,我们深表歉意。他们是相对的,正如他们在回答中提到的那样,这是我问题的根源。谢谢!
理想情况下,我正在寻求一种重命名我所有动漫的方法,同时保持原始文件的完整性,而无需使用额外的数据空间
我能想到的解决方案是创建一个到另一个位置的重复文件夹路径,然后将每个文件符号链接到新的重复文件夹路径中,以便为媒体刮刀重命名以识别它们
我的问题是如何为文件夹中的每个文件创建一个指向新位置的符号链接。
使用 FreeBSD 9,以下对我不起作用:
cd ../bar
cp --symbolic-link ../foo/* .
Run Code Online (Sandbox Code Playgroud)
单独进行(但是这是文件重命名,现在不需要)
ln -s "/ZFSRaidz/Multimedia/Anime/Naruto_Shippuuden/[HorribleSubs] Naruto Shippuuden - 244 [480p].mkv" "/ZFSRaidz/XBMC/Multimedia/Anime/Naruto_Shippuuden/Naruto Shippuuden-244.mkv"
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下命令符号链接一些 php 文件:
find `pwd` -name "*.php" | ln -s * /home/frankv/www/bietroboter.de/symlinks
Run Code Online (Sandbox Code Playgroud)
但是,所有符号链接都被破坏了,因为小 * 不引用完整路径,只引用文件名本身。当我使用以下方法将它们写入文件时:
find `pwd` -name "*.php" > test.txt
Run Code Online (Sandbox Code Playgroud)
有用。我怎样才能正确地管道它?另外,我怎么能告诉它我不想要任何包含“.php~”的“.php”文件