Bash

刪除名稱超過 N 天且名稱為 YYYYMMDD 的子目錄

  • September 1, 2017

我有一個目錄,其中創建了每日子目錄,字面意思是根據$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確保我們只檢查(刪除)目錄。

您不應該parsels,而是可以執行以下操作:

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

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