如何在Linux中删除除上一周以外的日志文件

-rw-rw-r--. 1 root root 26753164 Nov  6 10:09 chart_20190924.bin
-rw-rw-r--. 1 root root 26752800 Nov  6 10:09 chart_20190925.bin
-rw-rw-r--. 1 root root 26751824 Nov  6 10:09 chart_20190926.bin
-rw-rw-r--. 1 root root 26753048 Nov  6 10:09 chart_20190927.bin
-rw-rw-r--. 1 root root 26753047 Nov  6 10:09 chart_20190928.bin
-rw-rw-r--. 1 root root 26751753 Nov  6 10:09 chart_20190929.bin
-rw-rw-r--. 1 root root 26751752 Nov  6 10:09 chart_20190930.bin
-rw-rw-r--. 1 root root 26756171 Nov  6 10:09 chart_20191001.bin
-rw-rw-r--. 1 root root 26762749 Nov  6 10:09 chart_20191002.bin
-rw-rw-r--. 1 root root 26763022 Nov  6 10:09 chart_20191003.bin
-rw-rw-r--. 1 root root 26763021 Nov  6 10:09 chart_20191004.bin
-rw-rw-r--. 1 root root 26763021 Nov  6 10:09 chart_20191005.bin
-rw-rw-r--. 1 root root 26767792 Nov  6 10:09 chart_20191101.bin
-rw-rw-r--. 1 root root 26768566 Nov  6 10:09 chart_20191102.bin
-rw-rw-r--. 1 root root 26768565 Nov  6 10:09 chart_20191103.bin
-rw-rw-r--. 1 root root 26768565 Nov  6 10:09 chart_20191104.bin

这是我的日志文件

所以我要删除没有此文件的文件

-rw-rw-r--. 1 root root 26767792 Nov  6 10:09 chart_20191101.bin
-rw-rw-r--. 1 root root 26768566 Nov  6 10:09 chart_20191102.bin
-rw-rw-r--. 1 root root 26768565 Nov  6 10:09 chart_20191103.bin
-rw-rw-r--. 1 root root 26768565 Nov  6 10:09 chart_20191104.bin

所以我尝试了这三个代码,但是没有用

find . -mtime +15 -name 'chart_*' -exec rm -rf {} \;
find . -maxdepth 1 -mtime -10 -type f -name "chart_*" -delete
find . -type f -mtime +15 -exec rm -f {} +

所以有人可以提供一些建议或解决方案,如何在过去一周内删除文件 谢谢

xiaoqingqiu22 回答:如何在Linux中删除除上一周以外的日志文件

如果您不介意覆盖日志文件的修改时间, 怎么样:

#!/bin/bash

dir="."
for f in "$dir"/chart_*.bin; do
    date="${f#*chart_}"       # trim the substring before "chart_"
    date="${date%.bin}0000"   # trim the substring after ".bin" and append time
    touch -m -t "$date" "$f"  # update the mtime
done

find "$dir" -type f -name "chart_*.bin" -mtime +7 -exec rm -f {} \;

它首先将文件的mtime调整为嵌入文件名的日期 然后执行普通的find and delete过程。

显然,它需要两个步骤,而且不如@jhnc的解决方案那么优雅。 一个可能的优点(如果有)可能是因为它不使用date -d命令 这取决于平台。

希望这会有所帮助。

本文链接:https://www.f2er.com/3155479.html

大家都在问