根据时间删除某些文件夹的脚本

根据时间删除某些文件夹的脚本

我需要创建一个 bash 脚本,用于删除包含特定日期备份的文件夹。我需要继续执行以下操作:

a) 星期五 23:30 创建的文件\文件夹 b) 月初(每月 1 号)创建的文件\文件夹 c) 最近两周

有什么建议\起点吗?

非常感谢您的意见。

托梅克

答案1

tmpreaper可能会对你有帮助。你可以使用参数来避免删除某些文件--protect

如果你使用如下模式命名备份

<year>-<month>-<day>-<day-of-week>@<hour>:<minute>

你可以使用类似的东西:

tmpreaper [...] --protect 'FRIDAY@23:30' --protect '*-*-01-*' 14d /path/to/backups

http://manpages.ubuntu.com/manpages/zesty/man8/tmpreaper.8.html

答案2

尝试使用find。例如,针对过去 14 天内更改过的文件:

find . -mtime -14 -delete

阅读find 的手册页了解更多信息。有很多选项可供使用。或者,对于您正在寻找的更具体的情况,请参阅以下内容:https://stackoverflow.com/a/158235/42580

答案3

其他答案建议根据文件修改时间来执行此操作。这可行,但我想建议一种完全不同的方法来实现您要尝试的操作。

在以今天的日期命名的目录中创建备份(例如,名为 的目录backup-20170516)。然后,您可以轻松查看哪些备份是在何时完成的,并删除要删除的备份的目录。

即使文件修改时间戳被意外更改,这也能起作用,如果有人使用该touch命令,或者将文件从一个系统复制到另一个系统而没有正确的选项来保留日期,就会发生这种情况。

backup-yyyymmdd在 中生成 14 天前的字符串很容易bash。详细信息请参阅https://stackoverflow.com/questions/13168463/using-date-command-to-get-previous-current-and-next-month

答案4

对于 GNU:

# make a list of files not created on Friday at 23:30 (I would go for 23rd hour)
# also exclude files created on the first of the month

temporary_file=$(mktemp -q /tmp/$0.XXXXXX)
if [ $? -ne 0 ]; then
    echo "$0: Can't create temp file, exiting..."
    exit 1
fi
ls -l --time-style="+%H___%a___%d" |\
    grep -v "23___Fri" |\
    grep -v "___1" |\
    cut -f 1 | sed -e 's,^,./,' | sort \
  > $temporary_file

# Now just older than two weeks; compare with list and exclude
find . -mtime +14 | sort |\
    comm -23 - $temporary_file |\
    tr "\r" "\0" |\
    xargs -0 -n 10 echo

rm $temporary_file

对于 BSD 风格,不要使用 --time-style="+%H___%a",而要使用 -D "+%H___%a" 等。

当你确定它正确时,将 xargs 后的“echo”替换为“rm”。

相关内容