Bash
刪除名稱超過 N 天且名稱為 YYYYMMDD 的子目錄
我有一個目錄,其中創建了每日子目錄,字面意思是根據
$date
. 如何根據文件名中的 YYYYMMDD而不是元數據日期刪除超過 7 天的文件夾及其內容?說我有(為簡潔起見跳過了一些):20170817 20170823 20170828 20170901
我最終會得到以下文件夾(應該保留這些文件夾):
20170828 20170901
我創建了一個包含 7 天前日期的變數:
dt_prev=$(date -d "
date-7days" +%Y%m%d)
我的想法是
ls -l
列出這些文件夾名稱並逐行比較,但這涉及清理該列表等,我認為必須有一種更簡單的方法。
我認為解決方案將是格倫傑克曼發布的更簡單的版本,例如
seven_days=$(date -d "7 days ago" +%Y%m%d) for f in [0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]; do [ -d "$f" ] || continue (( $f < $seven_days )) && echo rm -r "$f" done
echo
如果結果看起來正確,請刪除。測試
-d
確保我們只檢查(刪除)目錄。
您不應該parse
ls
,而是可以執行以下操作:for f in *; do test "$f" -lt "$date" && do something; done
對於您的範例,對於以下目錄和
date=20170825
:$ ls 20170817 20170823 20170828 20170901 $ for f in *; do test "$f" -lt "$date" && echo "$f"; done 20170817 20170823