用于备份和删除目录的简单 bash 脚本

用于备份和删除目录的简单 bash 脚本

我做了这个,令人惊讶的是,它不起作用

#!/bin/bash

cd /home/test/backup

cp -a vaults backup/vaults-$(date +%d-%m-%y-%S)

find backup/vaults-* -mtime +5 -exec rm -r {} \;

我需要它来备份目录,然后删除所有超过 5 天的目录。它删除所有内容并输出类似这样的内容

find: `backup/vaults-27-02-17-41': No such file or directory

答案1

我通常使用 tar 进行此类备份。以下是适合您情况的示例:

tar -czf /backup/vault-$(date -I).tar.gz vaults/*
find backup/ -type f -iname "*.tar.gz" -mtime +5 -delete

这里使用tar命令我们得到带有时间戳的压缩备份存档。然后,find我们只在备份目录中查找以 tar.gz 结尾的文件,如果它们早于五天,则将其删除。

但如果你不能使用tar而想使用cp和find。那么你已经几乎正确了,但你的发现应该是这样的:

find backup/ -mindepth 1 -maxdepth 1 -type d -iname "vaults-*" -mtime +5 -exec rm -rf {} \;

请注意 mindepth 和 maxdepth 开关,它们的值为 1,find 仅列出备份目录。如果没有它们, find 将在执行命令后尝试下降到该目录,rm从而导致像您一样的错误,或者它也可能尝试删除父目录。此外,rm命令必须使用“-rf”选项执行,以便它还会删除不为空的目录,并且在执行此操作时不会尝试询问任何内容。

您还应该考虑使用快照对于这种备份。它可以为您节省一些存储空间,并且还可以根据您可以自行配置的保留策略来处理删除。

相关内容