Shell
刪除源自特定目錄的符號連結
我有一個“install.sh”來安裝我的個人腳本:
find /home/Steven -name '*.sh' -exec ln -s -t /usr/local/bin {} +
我想製作一個“uninstall.sh”來刪除由“install.sh”創建的符號連結。我寫了這個:
for z in /usr/local/bin/* do if [ -h "$z" ] then rm "$z" fi done
但它會刪除所有符號連結,而不僅僅是目標位於“/home/Steven”下的符號連結。
如果你有 GNU 或 BSD
find
,應該這樣做:find -lname '/home/Steven/*' -delete
您可以修改您的腳本並使用
grep
或readlink
提取realpath
所需子目錄中的文件,例如:for z in /usr/local/bin/* do if [ -h "${z}" ] && readlink -f "${z}" | grep -q '^/home/Steven' then rm "${z}" fi done
該
readlink -f
命令返回符號連結指向的文件的完整路徑。grep -q '^/home/Steven'
如果路徑以子字元串 ‘/home/Steven’ 開頭,該命令返回 true,否則返回 false。提醒一句:與符號連結相關的一些歧義可能會影響此處的結果。該命令將遞歸解析連結,因此如果目錄中的文件本身是該目錄之外的符號連結點
readlink -f
,則上述命令將失敗。/home/Steven
如果這不是所需的行為,那麼您可能想要使用該realpath
命令。