Bash

如何一次性刪除損壞的符號連結?

  • December 23, 2020

我創建了指向大量日誌文件的符號連結。日誌文件的語法是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 直接刪除文件,無需再費心xargsor-exec

注意:-xtype l 表示 -xtype小寫L(如鍊接中);)

GNU Findutils:查找

find -L /path -type l -exec rm -i {} \;

使用-L,find嘗試遵循符號連結來評估-type測試。如果它成功地跟隨連結,那麼連結不會被破壞,並且-type l測試將是錯誤的(因為它是針對連結解析為的事物進行評估的)。如果跟隨連結失敗,則連結斷開,-type l測試為真。

如果-type l測試成功,則-exec rm {} \;刪除斷開的連結。

建議使用-xtype lGNUism,主要針對 Linux 使用者,不適用於非 GNU UNIX 系統,如 Solaris、FreeBSD 等。

引用自:https://unix.stackexchange.com/questions/314974