我使用bash创建了一个cron来删除超过3天的文件,但是当使用mtime +3 &〉/dev/null检查文件的年龄时,它总是false。
now=$(date)
create log file
file_names=('*_takrib_golive.gz' '*_takrib_golive_filestore.tar.gz')
touch /media/nfs/backup/backup_delete.log
echo "Date: $now" >> /media/nfs/backup/backup_delete.log
for filename in "${file_names[@]}";
do
echo $filename
if ls /media/nfs/backup/${filename} &> /dev/null
then
echo "backup files exist"
if find /media/nfs/backup -maxdepth 1 -mtime +3 -name ${filename} -ls &> /dev/null
then
echo "The following backup file was deleted" >> /media/nfs/backup/backup_delete.log
find /media/nfs/backup -maxdepth 1 -mtime +3 -name ${filename} -delete
else
echo "There are no ${filename} files older than 3 days in /media/nfs/backup" &>> /media/nfs/backup/backup_delete.log
fi
else
echo "No ${filename} files found in /media/nfs/backup" >> /media/backup/backup_delete.log
fi
done
exit 0
在if find /media/nfs/backup -maxdepth 1 -mtime +3 -name ${filename} -ls &> /dev/null
中总是转到else,即使目录中存在3天前的文件
1条答案
按热度按时间wmomyfyw1#
您没有引用
-name
属性,因此它将扩展为已存在的文件名。无论如何,我会相当广泛地重构这个。Don't parse
ls
output,也许通过使什么时候引用和什么时候不引用变得更明显来简化这个问题。未经测试,但仍有希望隐约有用:
for
+if [ -e ... ]
的排列有点笨拙,但这就是检查通配符是否与任何文件匹配的方法。如果通配符不匹配,if [ -e
将检查文件名实际上是通配符表达式本身的文件,并失败。