移动系统后如何重新链接这些符号链接?

移动系统后如何重新链接这些符号链接?

我使用 FAT32 存储卡将我的文件系统和符号链接从 Ubuntu 14.04 移动到 16.04,这显然破坏了这些链接;停止使用 BitTorrentSync。不同的情况是,由于 XSym,这些链接是我的 OSX 安装的残余。我做的ls -la $HOME | grep Math是一个符号链接

-rw-r--r--  1 masi masi   1067 May 17 21:28 Math

文本编辑器中的哪些内容

XSym
0078
48055bd2d9c13568c969e1eb8d6a22ac
/Users/masi/Math/

它应该指向/Users/masi/LOREM/Math/相反。仅手动更正 PATH 是行不通的,因为链接仍然处于死亡状态。 吉尔斯的命令也可以适用于此:

find /Users/masi/Math/ /
    -lname '/Users/masi/LOREM/Math/*' \ 
    -exec sh -c 'ln -snf "/mnt$(readlink "$0")" "$0"' {} \;

我不确定我是否按正确的顺序获取了源和目的地。

系统:Ubuntu 14.04、Ubuntu 16.04

答案1

我想到了两种可能的解决方案。

1. 遍历所有目录LOREM并将它们符号链接到$HOME

cd "$HOME/LOREM"
for item in *
do
    test -d "$item" || continue
    mv -f "$HOME/$item" "$HOME/$item.DELETE_ME_LATER" 2>/dev/null
    ln -s "$HOME/LOREM/$item" "$HOME/$item"
done

# Once you are happy that only the correct files have been replaced
# rm "$HOME"/*.DELETE_ME_LATER

您可以在rm和前面添加(例如),以在进行任何更改之前查看脚本的效果lnechoecho rm -f "Users/masi/$item"

2. 处理现有文件集并将它们转换为正确的符号链接

这需要一些启发(猜测),因为没有任何具体的东西可以标识应该是符号链接的文件。

像这样的东西可能会起作用

for file in *
do
    # Skip files that we have already processed
    [[ $file =~ DELETE_ME_LATER ]] && continue

    # Look for a path-like string in the file
    path=$(grep "^$HOME/" "$file")
    if test -d "$path"
    then
        # It is a directory
        mv -f "$file" "$file.DELETE_ME_LATER"
        ln -s "$HOME/LOREM/$file" "$file"
    fi
done

# Once you are happy that only the correct files have been replaced
# rm *.DELETE_ME_LATER

同样,您可以在mvandln语句前加上前缀echo来查看效果,而不应用任何更改。

答案2

这不是一个答案,只是放大了对于评论来说太大的信息。

这些XSym文件已得到解释(某种程度上)这里

最初的发帖人在最初的问题中没有提到这一点,但我猜测 Léo 的文件系统位于 NAS(或其他家庭网络服务器)上,运行 Samba,从 Mac 访问。因此,符号链接实际上并不是符号链接。

我不能 100% 肯定是 macOS 版本ln还是 Samba 本身编写了这些假符号链接文件;我的猜测是 Samba,但上面链接的文档对此并不清楚。总而言之,它们是支持 SMB/CIFS 文件系统上的 Unix 客户端符号链接的方式。

相关内容