Find

移動系統後如何重新連結這些符號連結?

  • October 25, 2020

我使用 FAT32 儲存卡將文件系統和符號連結從 Ubuntu 14.04 移動到 16.04,這顯然破壞了這些連結;停止使用 BitTorrentSync。不同的條件是這些連結是我的 OSX 安裝的殘餘,因為 XSym。我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 不起作用,因為連結保持死亡。 Gilles 的命令也適用於這裡:

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.遍歷所有目錄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

您可以在rmand前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

同樣,您可以在mvandln語句前面加上echo以查看效果而不應用任何更改。

引用自:https://unix.stackexchange.com/questions/288644