如何自動清除指定資料夾下的符號連結

大雄45發表於2021-06-11
導讀 這篇文章主要介紹了使用 實現自動清除指定資料夾下丟失連結檔案的符號連結,本文給大家介紹的非常詳細,具有一定的參考借鑑價值,需要的朋友可以參考下

可清除,指定資料夾下,對視連結檔案的符號連結。

在使用 時,常常會為自己許多檔案或者程式建立符號連結,這樣就不用每次都到對應的資料夾下去尋找對應的檔案而只需要對需要經常訪問的檔案建立符號連結就可以了,這樣就能把你常需要訪問的檔案放到桌面上,或者指定到另外一個資料夾中。

這樣訪問時,方便了很多,但是用完之後往往留下許多的符號連結,這些連結需要使用者自己手動確認是否可以刪除,為linux的使用帶來很多的不方便,使用該指令碼就能解放你的雙手,只需要執行一下指令碼,就能將對應資料夾下沒有用的符號連結清除。

#!/bin/bash
# 一個可以測試連結斷掉的符號連結的檔案,並且可以輸出它們指向的檔案
# 以便於它們可以把輸出提供給xargs來進行處理 :)
# 比如. broken-link.sh /somedir /someotherdir|xargs rm
#
#下邊的方法, 不管怎麼說, 都是一種更好的辦法:
#
#find "somedir" -type l -print0|\
#xargs -r0 file|\
#grep "broken symbolic"|
#sed -e 's/^\|: *broken symbolic.*$/"/g'
#
#但這不是一個純粹的bash指令碼, 最起碼現在不是.
#注意: 謹防在/proc檔案系統和任何死迴圈連結中使用!
##############################################################
#如果沒有引數被傳遞到指令碼中, 那麼就使用
#當前目錄. 否則就是用傳遞進來的引數作為目錄
#來搜尋.
####################
[ $# -eq 0 ] && directorys=`pwd` || directorys=$@
 
#編寫函式linkchk用來檢查傳遞進來的目錄或檔案是否是連結,
#並判斷這些檔案或目錄是否存在. 然後列印它們所指向的檔案.
#如果傳遞進來的元素包含子目錄,
#那麼把子目錄也放到linkcheck函式中處理, 這樣就達到了遞迴的目的.
##########
linkchk () {
  for element in $1/*; do
    [ -h "$element" -a ! -e "$element" ] && echo \"$element\"
    [ -d "$element" ] && linkchk $element
    # 當然, '-h'用來測試符號連結, '-d'用來測試目錄.
  done
}
#把每個傳遞到指令碼的引數都送到linkchk函式中進行處理,
#檢查是否有可用目錄. 如果沒有, 那麼就列印錯誤訊息和
#使用資訊.
################
for directory in $directorys; do
  if [ -d $directory ]
    then linkchk $directory
    else
      echo "$directory is not a directory"
      echo "Usage: $0 dir1 dir2 ..."
  fi
  done
exit 0
# 建立一個新檔案 name
andrew@andrew:/work/bash/src$ touch name
# 為name建立符號連結
andrew@andrew:/work/bash/src$ ln -s name aaa
# 刪除name檔案, aaa將會變成丟失連結檔案的符號連結
andrew@andrew:/work/bash/src$ rm name
# 檢視aaa為執行當前目錄下的name的符號連結檔案
andrew@andrew:/work/bash/src$ ls -l
總用量 44
lrwxrwxrwx 1 andrew andrew  4 2月  1 13:20 aaa -> name
-rwxrwxr-x 1 andrew andrew 8656 1月 30 14:46 a.out
-rw-rw-r-- 1 andrew andrew 1887 2月  1 13:08 broken_link.sh
-rw-rw-r-- 1 andrew andrew 322 1月 29 13:08 echo_unique.sh
-rw-rw-r-- 1 andrew andrew 1513 1月 29 15:55 escape_charater.sh
-rw-rw-r-- 1 andrew andrew 279 1月 30 13:48 exit_example.sh
-rw-rw-r-- 1 andrew andrew 199 2月  1 11:52 if_else_more.sh
-rw-rw-r-- 1 andrew andrew 1946 1月 30 21:03 if_true.sh
-rw-rw-r-- 1 andrew andrew 337 1月 29 14:02 single_quotation_mark.sh
-rw-rw-r-- 1 andrew andrew 864 2月  1 12:00 test.c
# 呼叫指令碼清除當前資料夾中,丟失連結檔案的符號連結
andrew@andrew:/work/bash/src$ bash broken_link.sh ./ | xargs rm
andrew@andrew:/work/bash/src$ ls -l
總用量 44
-rwxrwxr-x 1 andrew andrew 8656 1月 30 14:46 a.out
-rw-rw-r-- 1 andrew andrew 1887 2月  1 13:08 broken_link.sh
-rw-rw-r-- 1 andrew andrew 322 1月 29 13:08 echo_unique.sh
-rw-rw-r-- 1 andrew andrew 1513 1月 29 15:55 escape_charater.sh
-rw-rw-r-- 1 andrew andrew 279 1月 30 13:48 exit_example.sh
-rw-rw-r-- 1 andrew andrew 199 2月  1 11:52 if_else_more.sh
-rw-rw-r-- 1 andrew andrew 1946 1月 30 21:03 if_true.sh
-rw-rw-r-- 1 andrew andrew 337 1月 29 14:02 single_quotation_mark.sh
-rw-rw-r-- 1 andrew andrew 864 2月  1 12:00 test.c

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2776437/,如需轉載,請註明出處,否則將追究法律責任。

相關文章