gpt4 book ai didi

bash - 如何使用 bash 脚本用 tar 备份文件系统?

转载 作者:行者123 更新时间:2023-11-29 09:18:32 25 4
gpt4 key购买 nike

我想备份我的 ubuntu 文件系统,我写了这个小脚本。这是非常基本的,但作为我的第一次尝试,我害怕犯错。由于需要几个小时才能完成才能看到结果,所以我认为如果我做错了什么,最好问问你们这些有经验的程序员。

我对 > 特别感兴趣 会记录 mv 的输出还是它也会输出 tar 的结果?tar 命令中的变量也是正确的方法吗?

#!/bin/bash

mybackupname="backup-fullsys-$(date +%Y-%m-%d).tar.gz"

{ time tar -cfpzv $mybackupname --exclude=/$mybackupname --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev / && ls -gh $mybackupname && mv -v $mybackupname backups/filesystem/ ; } > backup-system.log

exit

在运行此之前我应该​​知道什么?

最佳答案

Sandro,你可能想考虑在你的脚本中分隔一些东西并产生单独的错误。使内容更易于阅读。

#!/bin/bash

mybackupname="backup-fullsys-$(date +%Y-%m-%d).tar.gz"

# Record start time by epoch second
start=$(date '+%s')

# List of excludes in a bash array, for easier reading.
excludes=(--exclude=/$mybackupname)
excludes+=(--exclude=/proc)
excludes+=(--exclude=/lost+found)
excludes+=(--exclude=/sys)
excludes+=(--exclude=/mnt)
excludes+=(--exclude=/media)
excludes+=(--exclude=/dev)

if ! tar -czf "$mybackupname" "${excludes[@]}" /; then
status="tar failed"
elif ! mv "$mybackupname" backups/filesystem/ ; then
status="mv failed"
else
status="success: size=$(stat -c%s backups/filesystem/$mybackupname) duration=$((`date '+%s'` - $start))"
fi

# Log to system log; handle this using syslog(8).
logger -t backup "$status"

如果您想保留调试信息(如 tarmv 的标准错误),可以通过重定向到 tmp 文件或调试文件来处理。但是如果命令是通过 cron 运行的并且有输出,cron 应该通过电子邮件将它发送给你。静默的 cron 作业是成功的 cron 作业。

if 系列导致每个程序在前一个程序成功时运行。这就像用 && 链接你的命令,但允许你在失败的情况下运行其他代码。

请注意,我已经更改了 tar 的选项顺序,因为 -f 之后的内容是您要将内容保存到的文件。此外,-p 选项仅在从 tar 中提取 文件时有用。创建 (-c) tar 时,始终会保存权限。

其他人可能希望注意到 stat 命令的这种用法在 GNU/Linux 中有效,但在其他操作系统如 FreeBSD 或 Mac OSX 中无效。在 BSD 中,您将使用 stat -f%z $mybackupname

关于bash - 如何使用 bash 脚本用 tar 备份文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11467698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com