Unix
如何列出目錄中沒有符號連結的目錄?
我正在嘗試做一些類似於這個問題的清理工作。在 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。請務必徹底測試。我建議用
-exec
an 替換該部分,ls
直到您確定它有效。
touch current;find . -maxdepth 1 -type d -mmin +2 -exec rm -rf {} \;
它只會檢查目前目錄。它本質上是觸及由“目前”連結的目錄,然後刪除修改時間超過兩分鐘的任何內容。如果有一段時間沒有觸及其他目錄,您可以增加計時器 on
-mmin
,這樣您就不會意外地核對您想要的目錄。如果您不介意更改目前目錄上的時間戳,這顯然是可行的。——克里斯托弗·卡雷爾