Unix

如何列出目錄中沒有符號連結的目錄?

  • March 8, 2011

我正在嘗試做一些類似於這個問題的清理工作。在 UNIX 作業系統中,我想刪除給定目錄中沒有符號連結的目錄。

例如,我有一個為這樣的應用程序創建目錄結構的部署腳本:

1.0-201103071711/
1.0-201103071718/
1.0-201103071729/
current -> /opt/myapps/fooapp/1.0-201103071729/

我想創建一個腳本,該腳本將刪除該目錄中不是“目前”目錄的目錄。謝謝!

這個 Bash 片段將查找沒有連結到它們的目錄的目錄。它還會找到斷開的連結。

for f in *; do (($(find -L -maxdepth 1 -samefile "$f" 2>/dev/null | wc -l) == 1)) && echo "found: $f"; done

它不會在目前目錄之外或在子目錄中查找。

一定要徹底測試它。

正如提到的問題所提到的,沒有官方的方法可以做到這一點。作為 Dennis 選項的替代方案,我提出了以下可怕的 hack。請務必徹底測試。我建議用-execan 替換該部分,ls直到您確定它有效。

touch current;find . -maxdepth 1 -type d -mmin +2 -exec rm -rf {} \;

它只會檢查目前目錄。它本質上是觸及由“目前”連結的目錄,然後刪除修改時間超過兩分鐘的任何內容。如果有一段時間沒有觸及其他目錄,您可以增加計時器 on -mmin,這樣您就不會意外地核對您想要的目錄。如果您不介意更改目前目錄上的時間戳,這顯然是可行的。

——克里斯托弗·卡雷爾

引用自:https://serverfault.com/questions/244749