UNIX 命令取消引用符号链接?

UNIX 命令取消引用符号链接?

是否有UNIX命令可以取消引用符号链接?我想用它指向的文件的副本替换该链接。

例子:

$ ls
a
b -> a

$ deref b
$ ls 
a
b

现在,a 和 b 具有相同的内容,但彼此独立。我的问题是是否有这样的deref命令。重要提示:我不必知道b指向哪里;命令应该能弄清楚。

答案1

您可以使用readlink来查找文件名,但是您不必这样做!

cp b c
mv c b

就这么简单。如果您正在编写脚本来执行此操作,则应使用 的输出mktemp而不是的输出,c以确保不会覆盖已存在的文件 c

答案2

结合这两个答案可得出以下结论:

#!/bin/bash

if [ -h "$1" ] ; then
  target=`readlink $1`
  rm "$1"
  cp "$target" "$1"
fi

答案3

通过复制符号链接指向的任何内容来实现......

阅读链接(1)cp(1)更新:当你这样做的时候:阅读链接(2)

符号链接实际上就是到另一个文件的符号链接(读取:通过目标名称) - 它不共享另一个文件的内容。(硬链接,有人知道吗?)。

答案4

没有这样的命令,但是您可以执行以下操作:

rm b
cp a b

相关内容