【问题标题】:Detect if a file was created with todays date and then remove older files检测文件是否以今天的日期创建,然后删除旧文件
【发布时间】:2017-01-06 14:23:37
【问题描述】:

我有一个脚本可以删除特定目录中超过 +2 天的文件。 我想检查在删除旧文件之前是否创建了今天日期的文件。 这就是我所拥有的:

#!/bin/bash

find /var/backups/server1 -type f -mtime +2 -exec rm {} \;
find /var/backups/server2 -type f -mtime +2 -exec rm {} \;
find /var/backups/server3 -type f -mtime +2 -exec rm {} \;
find /var/backups/server4 -type f -mtime +2 -exec rm {} \;
find /var/backups/server5 -type f -mtime +2 -exec rm {} \;

所以基本上: 1.检查带有今天日期文件的目录。 2.如果肯定找到/var/backups/serverX -type f -mtime +2 -exec rm {} \; 3.如果不是“执行脚本X”(可能是邮件通知)

谢谢!

【问题讨论】:

  • 所以,如果有今天日期的文件,你想删除旧文件。 & 如果没有文件,应该怎么办?删除早于昨天的文件?还是什么都不做?
  • 换句话说,你想保留最新的并删除所有旧的吗?
  • 所以基本上: 1.检查带有今天日期的文件的目录。 2.如果肯定找到/var/backups/serverX -type f -mtime +2 -exec rm {} \; 3.如果不是“执行 scriptX”(可能是邮件通知),谢谢!

标签: linux bash shell


【解决方案1】:

你可以这样做

find /var/backups/ -maxdepth 1 -type d  -print0 | while read -rd '' dirname 
do
arry=( $(find "${dirname}" -type f -atime 0) )
#Checks if there is a file that is updated today.
[ "${#arry[@]}" -ge 1 ] && find "${dirname}" -type f -mtime +2 -exec rm {} \;
done

【讨论】:

  • 感谢您的快速回复。问题是目录名称并不总是服务器,有超过 50 个服务器不同的名称。所以我猜“for i in {1..4} do arry=( $(find /var/backups/server"${i}" 在我的情况下不起作用
  • @JoseluisVanta : 请查看更新并使用find -print0 - read -d '' 组合解析非标准名称
  • "find ... -atime 0" 适用于过去 24 小时内访问的任何文件。更好的“-mtime 0”(过去 24 小时内修改过的文件),或者,如果您的“查找”版本支持“查找 .-type f -newerBt 昨天”
  • @GiovanniLenti 正如你所说的那样,-newerBt 没有得到广泛实施,如果出生时间未知,测试可能会失败。
  • @sjsam :您仍然需要将-atime 更改为-mtime。 ?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
相关资源
最近更新 更多