2016-07-16 41 views
2

在sardi圖標主題中,我注意到符號鏈接指向符號鏈接指向原始圖像的符號鏈接。如何找到指向另一個符號鏈接的圖標的符號鏈接

命令

ls -lR . | grep ^l | wc 

顯示我,我有3511個的符號鏈接次5個圖標集。 15,000個鏈接檢查。

是否有(bash)方式向我顯示所有指向另一個符號鏈接的鏈接?

+1

鏈接,既硬又符號,只是一種方式。如果你想看到所有鏈接「指向」另一個鏈接,你必須檢查整個系統中的所有鏈接,看看哪些鏈接指向指定的目標。基本上你需要做'find/-type l'並檢查每個文件(如果它們指向目標,它的確會有幾千個)。 –

+0

可能的重複:https://stackoverflow.com/questions/6184849/symbolic-link-find-all-files-that-link-to-this-file –

+0

@LeoIzen我不認爲這是重複的。 – melpomene

回答

0

下面是使用find的解決方案和一些bash實現:

shopt -s extglob 
find . -type l | while read -r; do 
    t="$(readlink "$REPLY")" 
    if [[ "$t" != /* ]]; then 
     t="${REPLY%%*([^/])}$t" 
    fi 
    [ -L "$t" ] && echo "$REPLY" 
done 

或全部一行:

find . -type l | while read -r; do t="$(readlink "$REPLY")"; if [[ "$t" != /* ]]; then t="${REPLY%%*([^/])}$t"; fi; [ -L "$t" ] && echo "$REPLY"; done 
  • find . -type l找到的所有符號鏈接。
  • 然後對於每個符號鏈接$REPLY,我們使用readlink得到它的目標$t
  • 如果目標不是絕對名稱(不是從/開始),我們在原路徑$REPLY(表達式${REPLY%%*([^/])}刪除所有尾隨的非斜槓字符)前加上dirname。
  • 如果目標也是符號鏈接(-L),我們輸出原始名稱$REPLY

必須啓用extglob擴展才能使*([^/])正常工作。