将符号链接转换为相应的目标文件

将符号链接转换为相应的目标文件

我有一个目录中指向其他文件的多个符号链接。我想将这些链接转换为独立文件。

是否有命令可以执行此操作?

答案1

cp --remove-destination "$(readlink <symlink>)" <symlink>

答案2

虽然 Ignacio 的答复很好,但我想自动执行当前目录和子目录中每个符号链接文件的处理。

这是诀窍:

查找。-type l -exec cp \"{}\" \"{}.tmp$$\" \;-exec mv \"{}.tmp$$\" \"{}\" \;

希望这可以帮助!

答案3

我想到的第一个方法是将所有链接复制到新文件,然后删除所有链接。

cp <link> <link>.new
rm <link>

希望这些文件具有某种通用的命名结构,以便您可以使用通配符并只运行一次命令,否则您可能需要编写一个简单的 shell 脚本

答案4

仅供参考:Mac OS X 不支持--删除目的地标志,所以我写了一个简单的脚本放在你的 /usr/bin 目录中:

FILE=$1
TEMP=$1".tmp"

mv $FILE $TEMP

if [ -e $TEMP ]
then
    cp "$(readlink $TEMP)" $FILE

    if [ -f $FILE ]
    then
        rm $TEMP
    else
        echo "unln failed."
    fi
fi

这个让你使用通配符:

for FILE in "$@"
do
    TEMP=$FILE".tmp"

    if [ -h $FILE ]
    then
        mv $FILE $TEMP

        if [ -e $TEMP ]
        then
            cp "$(readlink $TEMP)" $FILE

            if [ -f $FILE ]
            then
                rm $TEMP
            else
                echo "unln failed for link: $FILE"
            fi
        fi
    fi
done

相关内容