我想準備腳本來洗掉 EC2 目錄上 3 個月之前創建的所有檔案夾。檔案夾看起來像這樣
20220310
20220304
20220210
20220203
20210403
20210405
在這種情況下,應該洗掉最后兩個目錄
代碼 :
#!/bin/bash
for i in $directory/*;do
if [ "$i" == "*202104*" ];then
echo $i
rm -rf $i
fi
done
uj5u.com熱心網友回復:
首先,我將使用以下date命令計算 3 個月前的日期:
# with GNU date (for example on Linux)
mindate=$(date -d -3month %Y%m%d)
# with BSD date (for example on macOS)
mindate=$(date -v -3m %Y%m%d)
然后我將使用 shell 算術比較來確定要洗掉的目錄:
# for dirpath in "$directory"/*
for dirpath in "$directory"/{20220310,20220304,20220210,20220203,20210403,20210405}
do
dirname=${dirpath##*/}
(( dirname <= mindate )) || continue
echo "$dirpath"
# rm -rf "$dirpath"
done
uj5u.com熱心網友回復:
==不進行通配符匹配。您應該在for陳述句本身中這樣做。
也不需要放在*通配符的開頭,因為年份是在目錄名稱的開頭,而不是在中間。
for i in "$directory"/202104*; do
if [ -d "$i" ]; then
echo "$i"
rm -rf "$i"
fi
done
該if宣告有兩個目的:
- 如果沒有匹配的目錄,則通配符會擴展為自身(除非您設定了該
nullglob選項),并且您將嘗試洗掉這個不存在的目錄。 - 如果存在匹配的檔案而不是目錄,則會跳過它們。
uj5u.com熱心網友回復:
建議使用命令查找哪些是 90 天前或更早之前創建的目錄find。
find . -type d -ctime 90
如果您想查找 90 --> 100 天前創建的目錄。
find . -type d -ctime -100 -ctime 90
一旦你有正確的檔案夾串列。將其提供給rm命令。
rm -rf $(find . -type d -ctime 90)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/448363.html
標籤:重击
