我使用 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
和前面添加(例如),以在进行任何更改之前查看脚本的效果ln
echo
echo 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
同样,您可以在mv
andln
语句前加上前缀echo
来查看效果,而不应用任何更改。
答案2
这不是一个答案,只是放大了对于评论来说太大的信息。
这些XSym
文件已得到解释(某种程度上)这里。
最初的发帖人在最初的问题中没有提到这一点,但我猜测 Léo 的文件系统位于 NAS(或其他家庭网络服务器)上,运行 Samba,从 Mac 访问。因此,符号链接实际上并不是符号链接。
我不能 100% 肯定是 macOS 版本ln
还是 Samba 本身编写了这些假符号链接文件;我的猜测是 Samba,但上面链接的文档对此并不清楚。总而言之,它们是支持 SMB/CIFS 文件系统上的 Unix 客户端符号链接的方式。