删除 UNIX 中超过 5 天的文件(文件名中的日期,而不是时间戳)

Nal*_*alu 10 bash sed rm

我想从目录中删除超过 5 天的日志文件。但删除不应基于文件的时间戳。它应该基于文件名。对于今天的例子日期是07月05日和目录包含类似名称的10个文件ABC_20120430.logABC_20120429.logABC_20120502.logABC_20120320.log等我希望能够通过提取从文件的名称日期以删除这些文件。

gle*_*man 7

我认为@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)


oHo*_*oHo 2

基于文件名的日期:

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)