Find
移動系統後如何重新連結這些符號連結?
我使用 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
您可以在
rm
and前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
以查看效果而不應用任何更改。