使用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
对比删除,觉得打包且删除原文件,更为合理。
假设目录名:/usr/log/
假设:将90天前的文件及文件夹都打包且删除。
cd /usr/log
find . -mtime +90 | xargs tar --remove-files -zcvf log.tar.gz
1. touch -t 01010000 time_file
2. find . ! -newer time_file | xargs rm
创建一个标准文件 time_file
然后删除不新于(! -newer) 这个文件的所有文件(也就是比这个文件创建时间早的文件)
noneki网友回答得不错!
第一步touch是要建立一个最后修改时间为“ 1月1号,0分0秒的”的比对文件time_file,
第二步, 用find查找,比time_file “不”新的所有文件,然后删除。
提示:如果是要根据修改时间,则把newer改成cnewer,如果是根据访问时间,则把newer改为anewer
#man find