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

deh*_*ann 6 unix shell

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

例子:

$ ls
a
b -> a

$ deref b
$ ls 
a
b
Run Code Online (Sandbox Code Playgroud)

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

Rom*_*aka 10

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

cp b c
mv c b
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

#!/bin/bash

if [ -h "$1" ] ; then
  target=`readlink $1`
  rm "$1"
  cp "$target" "$1"
fi
Run Code Online (Sandbox Code Playgroud)