Linux下,如何将最后修改时间在某个时间之前的文件删除掉?

2024-11-26 03:40:42
推荐回答(5个)
回答1:

使用find命令组合可完成此功能,步骤如下:

1、创建一个时间标签临时文件(如,创建一个1900年1月1日0时0分的文件)

touch -t 190001010000 rmfile.tmp

2、用find命令组合进行删除

find . -type f ! -newer rmfile.tmp -exec rm -f {} \;
-type f 只处理普通文件
-newer 修改时间比rmfile.tmp新的,即在rmfile.tmp之后的文件
! -newer 叹号 取反,即得到rmfile.tmp之前的文件
-exec 执行命令
rm -f 强制删除,不需要提示

3、删除标签临时文件

rm -f rmfile.tmp


将以上命令写到一个文件中,做成一个脚本程序,使用起来会更方便

#!/usr/bin/bash
read -p "input time [YYYYmmddHHMM]:" del_time
TMP_FILE=rmfile.tmp.$del_time
touch -t $del_time $TMP_FILE
if [ $? -ne 0 ]
then
    echo "create temp file: $TMP_FILE error"
    exit
fi
find . -type f ! -newer $TMP_FILE -exec rm -f {} \;
rm -f $TMP_FILE

回答2:

对比删除,觉得打包且删除原文件,更为合理。
假设目录名:/usr/log/
假设:将90天前的文件及文件夹都打包且删除。

cd /usr/log

find . -mtime +90 | xargs tar --remove-files -zcvf log.tar.gz

回答3:

1. touch -t 01010000 time_file
2. find . ! -newer time_file | xargs rm

创建一个标准文件 time_file
然后删除不新于(! -newer) 这个文件的所有文件(也就是比这个文件创建时间早的文件)

回答4:

noneki网友回答得不错!

第一步touch是要建立一个最后修改时间为“ 1月1号,0分0秒的”的比对文件time_file,

第二步, 用find查找,比time_file “不”新的所有文件,然后删除。

提示:如果是要根据修改时间,则把newer改成cnewer,如果是根据访问时间,则把newer改为anewer

回答5:

#man find