在一个目录中有每天生成的文件。2012 年 4 月 16 日生成的文件格式为 TEST_20120416。
所以我需要删除所有超过 7 天的文件。我试着这样做
#!/bin/ksh
find /data/Test/*.* -mtime -7 -exec rm -rf {} \;
exit 0
现在的问题是上面的代码是根据修改时间删除但根据要求文件应该根据创建时间删除。请帮助我根据文件名删除文件(文件名有时间戳)。
在一个目录中有每天生成的文件。2012 年 4 月 16 日生成的文件格式为 TEST_20120416。
所以我需要删除所有超过 7 天的文件。我试着这样做
#!/bin/ksh
find /data/Test/*.* -mtime -7 -exec rm -rf {} \;
exit 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_ 开头的文件,它将打印警告,在这种情况下,可能需要进行更多过滤。
find /data/Test/*.* -ctime -7 -delete
'找到 /data/Test/ 。' 将查找 /data/Test 文件夹中的所有文件,参数 '-ctime -7' 将搜索限制为持续 7 天的创建时间, -delete 选项将删除此类文件