此问题已经在这里有了答案:
-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 {} +
所以有人可以提供一些建议或解决方案,如何在过去一周内删除文件谢谢
如果您不介意覆盖日志文件的修改时间,怎么样:
#!/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
命令这取决于平台。
希望这会有所帮助。