使用腳本實(shí)現(xiàn)自動(dòng)清除指定文件夾下丟失鏈接文件的符號(hào)鏈接
使用腳本實(shí)現(xiàn)自動(dòng)清除指定文件夾下丟失鏈接文件的符號(hào)鏈接
腳本可清除,指定文件夾下,對(duì)視鏈接文件的符號(hào)鏈接。
在使用Linux時(shí),常常會(huì)為自己許多文件或者程序建立符號(hào)鏈接,這樣就不用每次都到對(duì)應(yīng)的文件夾下去尋找對(duì)應(yīng)的文件而只需要對(duì)需要經(jīng)常訪問(wèn)的文件建立符號(hào)鏈接就可以了,這樣就能把你常需要訪問(wèn)的文件放到桌面上,或者指定到另外一個(gè)文件夾中。
這樣訪問(wèn)時(shí),方便了很多,但是用完之后往往留下許多的符號(hào)鏈接,這些鏈接需要用戶自己手動(dòng)確認(rèn)是否可以刪除,為linux的使用帶來(lái)很多的不方便,使用該腳本就能解放你的雙手,只需要執(zhí)行一下腳本,就能將對(duì)應(yīng)文件夾下沒(méi)有用的符號(hào)鏈接清除。
#!/bin/bash
# 一個(gè)可以測(cè)試鏈接斷掉的符號(hào)鏈接的文件,并且可以輸出它們指向的文件
# 以便于它們可以把輸出提供給xargs來(lái)進(jìn)行處理 :)
# 比如. broken-link.sh /somedir /someotherdir|xargs rm
#
#下邊的方法, 不管怎么說(shuō), 都是一種更好的辦法:
#
#find "somedir" -type l -print0|\
#xargs -r0 file|\
#grep "broken symbolic"|
#sed -e 's/^\|: *broken symbolic.*$/"/g'
#
#但這不是一個(gè)純粹的bash腳本, 最起碼現(xiàn)在不是.
#注意: 謹(jǐn)防在/proc文件系統(tǒng)和任何死循環(huán)鏈接中使用!
##############################################################
#如果沒(méi)有參數(shù)被傳遞到腳本中, 那么就使用
#當(dāng)前目錄. 否則就是用傳遞進(jìn)來(lái)的參數(shù)作為目錄
#來(lái)搜索.
####################
[ $# -eq 0 ] && directorys=`pwd` || directorys=$@
#編寫函數(shù)linkchk用來(lái)檢查傳遞進(jìn)來(lái)的目錄或文件是否是鏈接,
#并判斷這些文件或目錄是否存在. 然后打印它們所指向的文件.
#如果傳遞進(jìn)來(lái)的元素包含子目錄,
#那么把子目錄也放到linkcheck函數(shù)中處理, 這樣就達(dá)到了遞歸的目的.
##########
linkchk () {
for element in $1/*; do
[ -h "$element" -a ! -e "$element" ] && echo \"$element\"
[ -d "$element" ] && linkchk $element
# 當(dāng)然, '-h'用來(lái)測(cè)試符號(hào)鏈接, '-d'用來(lái)測(cè)試目錄.
done
}
#把每個(gè)傳遞到腳本的參數(shù)都送到linkchk函數(shù)中進(jìn)行處理,
#檢查是否有可用目錄. 如果沒(méi)有, 那么就打印錯(cuò)誤消息和
#使用信息.
################
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
# 創(chuàng)建一個(gè)新文件 name
andrew@andrew:/work/bash/src$ touch name
# 為name創(chuàng)建符號(hào)鏈接
andrew@andrew:/work/bash/src$ ln -s name aaa
# 刪除name文件, aaa將會(huì)變成丟失鏈接文件的符號(hào)鏈接
andrew@andrew:/work/bash/src$ rm name
# 查看aaa為執(zhí)行當(dāng)前目錄下的name的符號(hào)鏈接文件
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
# 調(diào)用腳本清除當(dāng)前文件夾中,丟失鏈接文件的符號(hào)鏈接
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
總結(jié)
以上所述是小編給大家介紹的使用腳本實(shí)現(xiàn)自動(dòng)清除指定文件夾下丟失鏈接文件的符號(hào)鏈接,希望對(duì)大家有所幫助!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信