我做了这个,令人惊讶的是,它不起作用
#!/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”选项执行,以便它还会删除不为空的目录,并且在执行此操作时不会尝试询问任何内容。
您还应该考虑使用快照对于这种备份。它可以为您节省一些存储空间,并且还可以根据您可以自行配置的保留策略来处理删除。