2012-04-16 119 views
0

在目录中有每天生成的文件。 2012年4月16日生成的文件格式为TEST_20120416。根据创建时间删除文件

所以我需要删除所有超过7天的文件。我试着这样做

#!/bin/ksh 
find /data/Test/*.* -mtime -7 -exec rm -rf {} \; 
exit 0 

现在的问题是上面的代码是基于修改时间删去,但根据需要文件应该删除基于创作time.Kindly帮我在基于文件名删除文件(文件名有时间戳) 。

+1

[文件创建时间取决于文件系统上] [1] [1]:http://stackoverflow.com/questions/5929419/how-to-get-file-creation-date-in-linux – tuxuday 2012-04-16 09:42:05

+0

@tuxuday。 ..实际上,那里的大部分文件系统甚至没有记录文件创建时间。许多人天真地将'ctime'解释为“创作时间”,但这并不是什么... – twalberg 2015-01-14 16:50:11

回答

0

正如你幸运已经创建日期在文件名的编码,这应该工作:

#!/bin/sh 
REFDATE=$(date --date='-7 days' +%Y%m%d) 
PREFIX=TEST_ 
find /data/Test/ -name $PREFIX\* | while read FNAME; do 
    if [ ${FNAME#$PREFIX} -lt $REFDATE ]; then 
     rm $FNAME 
    fi 
done 

它会打印警告,如果你有开始TEST_在这种情况下,可能需要一些更多的过滤名其他一些文件。

-1
find /data/Test/*.* -ctime -7 -delete 

'find/data/Test/'将找到/ data/Test文件夹中的所有文件,参数'-ctime -7'将限制搜索创建时间为最近7天,-delete选项将删除此类文件

+1

'-mtime'过滤器修改时间。一个更合适的选择是'-ctime'。另请参阅此处:http://stackoverflow.com/q/10171069/694576 – alk 2014-04-18 15:21:38

+2

如果您发布一行代码作为答案,至少要用一两句话解释它在做什么。没有人会在他们的机器上执行来自Internet的随机命令。 – 2014-04-22 09:47:18

+0

好吧,我的坏。 find /data/Test/*.*将找到/ data/Test文件夹中的所有文件,参数-ctime -7将搜索创建时间限制为最近7天,-delete选项将删除此类文件 – 2014-04-22 09:53:26