删除超过 1 个月的文件,但保留在该月 1 日创建的文件

删除超过 1 个月的文件,但保留在该月 1 日创建的文件

我正在尝试使用 cronjob 从 CentOS 文件服务器上的文件夹中删除一些存档文件。要求:

  1. 删除上个月的文件
  2. 该月第一天的 .tgz 文件应该保持不变。

我知道我可以使用以下命令删除 x 天以前的文件:

find /path -mtime +30 -exec rm {} \;

但是,这不会影响每月第一天创建的档案。互联网似乎还没有提供答案(目前)。

答案1

首先说明一下

在 unix 文件系统上,你无法获得文件创建时间的信息。通常所说的时间是个状态改变时间文件的权限。这可能会因文件重命名或权限更改而改变。

看到这个关联了解更多信息。

因此请注意,以下解决方案可能会失败。

解决方案awk

find没有用于选择特殊日期的运算符。因此,诀窍是创建一个包含月份日期和文件名的输出,并使用不属于文件名的分隔符。我假设这#是一个可能的分隔符字符。

 find . -mtime +30 -printf "%Cd#%p\n"

在第二步中,您可以过滤掉不需要的文件。

 find . -mtime +30 -printf '%Cd#%p\n' |awk -F'#' '$1 !~ /^01/{print $2;}'

借助grep和的解决方案cut

执行与上述相同的技巧。

 find . -mtime +30 -printf '%Cd#%p\n' |grep -v '^01' |cut -d '#' -f 2

相关内容