《Advanced Bash-scripting Guide》學習(十五):測試壞的連結檔案(broken link),

來源:互聯網
上載者:User

《Advanced Bash-scripting Guide》學習(十五):測試壞的連結檔案(broken link),

本文所選的例子來自於《Advanced Bash-scripting Gudie》一書,譯者 楊春敏 黃毅

 1 #/bin/bash 2 #用一個純粹的shell指令碼來找出壞連結檔案 3 #什麼是broken link?對於符號連結(軟連結),如果先刪除原檔案,則會成為壞連結(broken link) 4  5 方法一 6 find "somedir" -type l -print0 | xargs -r0 file | grep "broken symbolic" | sed -e 's/^\|: *broken symbolic.*$/''/g' 7 #這並不是一個純粹的shell指令碼 8 #-type l 檔案類型為符號連結的檔案 9 #file命令用來識別檔案類型,也可用來辨別一些檔案的編碼格式10 #如果檔案是“broken link",那麼find . -type l -print0 | xargs -r0 file執行後就會顯示如下:./yum.log.soft: broken symbolic link to `/tmp/yum.log'11 12 #\| 是一個出現在樣式內部並經過轉義的定界符13 #當定界符號出現在樣式內部時,我們必須用首碼\對它進行轉義14 #sed 's:text:replace:g'15 #sed 's|text|replace|g'16 #sed 's|te\|xt|replace|g'17 18 #例子:19 #echo 123:thisthisthis | sed -e 's/^\|:*this.*$/''/g'20 #12321 #echo 123:abcthisthisthis | sed -e 's/|:.*this.*/''/g'22 #123                注意兩者的區別,即":"後有無"."23 24 方法二:25 #!/bin/bash26 27 #檢查目錄是否傳入參數,如果沒有傳入參數,就以目前的目錄作為搜尋目錄,28 #如果有傳入的參數,以傳入參數的目錄作為搜尋目錄29 # 其實這個$@是不可以改成$1的,有很多位置參數的情況還是存在的,換成$1隻對第一個位置參數有效30 if [ $# -eq 0 ]31 then 32    directorys=`pwd` 33 else 34    directorys=$@ 35 fi 36 37 #$1指的就是$directory,第一個位置參數,$1/*指的是$1下所有的目錄和檔案38 #這部分主要針對目錄下的目錄而言,如果$directory下還有一個目錄,那麼把整個目錄作為位置參數傳入linkchk函數,如果下面還有,再作為位置參數傳入,這是遞迴的39 #-h 檢查符號連結檔案是否存在(存在為真),! -e 檢查檔案是否不存在(不存在為真),這兩個同時要成立是不是前後矛盾?40 #經檢查,發現不是這樣,cat 壞連結名,會提示沒有那個檔案或目錄,說明連結檔案指向的原檔案的值已不存在,其屬性還在41 linkchk()42 { 43 for i in $1/* 44 do45    if [ -h "$i" -a ! -e "$i" ] 46    then47       echo "$i" 48    elif [ -d "$i" ]  49    then 50       linkchk "$i"51    fi 52 done53 }54   55 #linkchk()是一個自訂的函數,$directory是這個函數中傳入的第一個位置參數56 for directory in $directorys57 do58    if [ -d $directory ] 59    then 60       linkchk $directory 61    else 62       echo "$directory is not a directory" 63       echo "Usage: $0 dir1 dir2 ..." 64    fi65 done66 67 exit 0

指令碼運行結果

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.