我想从目录中删除超过 5 天的日志文件。但删除不应基于文件的时间戳。它应该基于文件名。对于今天的例子日期是07月05日和目录包含类似名称的10个文件ABC_20120430.log
,ABC_20120429.log
,ABC_20120502.log
,ABC_20120320.log
等我希望能够通过提取从文件的名称日期以删除这些文件。
我认为@oHessling几乎拥有它:不要解析 ls,你可以在 bash 中做更多的事情:
four_days=$(date -d "4 days ago" +%Y%m%d)
for f in ABC_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].log; do
date=${f#ABC_}
date=${date%.log}
(( $date < $four_days )) && rm "$f"
done
Run Code Online (Sandbox Code Playgroud)
基于文件名的日期:
THRESHOLD=$(date -d "5 days ago" +%Y%m%d)
ls -1 ABC_????????.log |
sed 'h;s/[_.]/ /g;G;s/\n/ /' |
while read A DATE B FILE
do
[[ $DATE -le $THRESHOLD ]] && rm -v $FILE
done
Run Code Online (Sandbox Code Playgroud)