Bash
如何一次性刪除損壞的符號連結?
我創建了指向大量日誌文件的符號連結。日誌文件的語法是
yyyymmdd.log.gz
.為了簡化事情,我使用一個簡單的序列而不用解析它
date
:for dd in $(seq -w 20150101 20151231) ; do ln -s $origin/$dd.log.gz $target/$dd.log.gz done
如何擺脫我剛剛創建的所有損壞的符號連結?
這個簡單的一個班輪可以很快完成這項工作,需要 GNU
find
:find . -xtype l -delete
一點解釋:
-xtype l
測試損壞的連結(與 相反-type
)
-delete
直接刪除文件,無需再費心xargs
or-exec
注意:-xtype l 表示 -xtype小寫L(如鍊接中);)
find -L /path -type l -exec rm -i {} \;
使用
-L
,find
嘗試遵循符號連結來評估-type
測試。如果它成功地跟隨連結,那麼連結不會被破壞,並且-type l
測試將是錯誤的(因為它是針對連結解析為的事物進行評估的)。如果跟隨連結失敗,則連結斷開,-type l
測試為真。如果
-type l
測試成功,則-exec rm {} \;
刪除斷開的連結。建議使用
-xtype l
GNUism,主要針對 Linux 使用者,不適用於非 GNU UNIX 系統,如 Solaris、FreeBSD 等。