我正在尝试使用 cronjob 从 CentOS 文件服务器上的文件夹中删除一些存档文件。要求:
- 删除上个月的文件
- 该月第一天的 .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