恢复bash脚本



我有一个备份目录,该目录下有一个tar文件(/home/username/userhome/backup/userbackup-${currentdate}.tar.gz)。我想创建一个脚本:

  1. 如果恢复目录不存在,则创建恢复目录
  2. 显示包含先前备份
  3. 的tar文件的备份目录的内容。
  4. 要求用户输入要恢复的tar文件的名称
  5. 使用tar命令将文件恢复到新的恢复目录和日志文件

到目前为止,我的脚本有

#!/bin/bash
mkdir restore -p
ls /home/username/userhome/backup
echo "Enter the file name to be restored"
read $filename
tar xvf "/home/username/userhome/restore/$filename" &>/home/username/userhome/restore/restore.log

我是一个完全的新手,所以任何帮助都会非常感激。

继续评论,在编写脚本时,您总是想要做的一件事是验证过程中的每一步。例如,如果您不能创建新的restore目录,那么您不希望循环然后尝试将tar.gz文件解压缩到不存在的目录中。

几乎所有的命令成功时返回0,失败时返回非零错误。您可以利用这一点来检查命令是否成功,如果没有,则直接退出。一个快速的方法是:

command || exit 1

在您的示例中,创建的restore目录可以是:

mkdir -p restore || exit 1

如果您愿意,可以添加额外的错误消息,但大多数情况下,故障产生的错误足以告诉您哪里出错了。

当您使用该基目录的子目录操作固定的基目录时,最好为该基目录创建一个变量,以便在脚本中使用。例如:

#!/bin/bash
userdir="${1:-/home/username/userhome}"
budir="$userdir"/backup
restore="$userdir"/restore

这里userdir是基本目录,对于备份目录和恢复目录有额外的变量。这样可以方便地引用或操作任何目录中的文件。还要注意userdir是如何从第一个命令行参数设置的,或者在没有给出参数的情况下默认使用/home/username/userhome

您可以创建restore并更改到该目录,验证每个步骤如下:

mkdir -p restore || exit 1
cd "$restore" || exit 1

对于菜单,让select为您创建菜单(现在如果您有数百个.tar.gz文件,您可能需要编写自定义分页器,但对于几十个文件,select就可以了)。您可以使用以下命令生成菜单并恢复所选文件:

select choice in "$budir"/*.tar.gz; do
tar -xvf "$choice" &>"$restore/restore.log"
break
done

把它们放在一起,你会有:

#!/bin/bash
userdir="${1:-/home/username/userhome}"
budir="$userdir"/backup
restore="$userdir"/restore
mkdir -p restore || exit 1
cd "$restore" || exit 1
select choice in "$budir"/*.tar.gz; do
tar -xvf "$choice" &>"$restore/restore.log"
break
done

使用/输出示例

假设我在一个目录中有几个.tar.gz文件,例如

$ tree /home/david/tmpd/backup
backup
├── v.tar.gz
└── x.tar.gz

然后在tmpd目录下创建一个恢复目录,我可以运行以下脚本:

$ bash ~/scr/tmp/restore.sh /home/david/tmpd
1) /home/david/tmpd/backup/v.tar.gz
2) /home/david/tmpd/backup/x.tar.gz
#? 2

通过选择2上面的x.tar.gz文件被恢复到restore目录下,例如

$ ls -al restore/
total 4
drwxr-xr-x 3 david david 80 Oct 29 01:00 .
drwxr-xr-x 4 david david 80 Oct 29 01:00 ..
drwxr-xr-x 3 david david 60 Oct 29 01:00 home
-rw-r--r-- 1 david david 57 Oct 29 01:00 restore.log

因此,restore目录创建成功,restore.log创建成功,.tar.gz文件恢复到restore目录下。

restore.log的内容为

$ cat restore/restore.log
home/david/scr/utl/xscrd.sh
home/david/scr/utl/xzdate.sh

(这是我添加到x.tar.gz文件中的两个示例文件)

请过目一遍,如果还有问题请告诉我。

相关内容

  • 没有找到相关文章

最新更新