SHELL脚本学习——自动备份

1、 tar 命令

tar {operation} [options…] [file]… :压缩文件
operation:
-c 创建压缩包
-x 提取文件
-t 列出文件
-f 指定文件名
-z 通过gzip指令处理备份文件

tar命令详细介绍见:https://www.runoob.com/linux/linux-comm-tar.html)

例:

$ ls -l
...
drwxrwxr-x  2 ubuntu ubuntu    4096 Jul  1 20:10 archive
drwxrwxr-x  5 ubuntu ubuntu    4096 Jul  1 20:06 build
drwxrwxr-x  4 ubuntu ubuntu    4096 May 22 13:19 src
...

$ tar -zcf ./archive/test.tar.gz ./src ./build

$ ls -l archive
...
-rw-rw-r-- 1 ubuntu ubuntu 252721 Jul  1 20:20 test.tar.gz
2、实现
  1. 将需要备份的目录的绝对路径添加到 $HOME/archive/file_to_backup.txt中。
  2. 脚本从file_to_backup.txt读出路径并以空格分隔,形成路径列表。
  3. 用tar命令将列表中的目录备份到 $HOME/archive目录下。
2.1 创建脚本文件backup.sh,并添加执行权限
$ touch backup.sh
ubuntu@VM-8-6-ubuntu:~$ ls -l backup.sh
-rw-rw-r-- 1 ubuntu ubuntu 0 Jul  1 20:35 backup.sh
ubuntu@VM-8-6-ubuntu:~$ chmod u+x backup.sh
ubuntu@VM-8-6-ubuntu:~$ ls -l backup.sh
-rwxrw-r-- 1 ubuntu ubuntu 0 Jul  1 20:35 backup.sh
2.2 backup.sh实现
#!/usr/bin/bash

file_backup=$HOME/archive/file_to_backup.txt
if [ ! -f $file_backup ] #检查file_to_backup.txt是否存在
then
    echo "$file_backup : No such file "
    exit
fi

#使用gawk将换行符换成空格
file_list=$(gawk 'BEGIN{ORS=" "}
{print $1}
END{print "\n"}
' $file_backup)

for var in $file_list
do
    if [ ! -d $var ] #存在并且是目录
    then
        echo warning: $var not exists or not a directory!
    else
        file_list_new="$file_list_new $var"
    fi
done

if [ -z "$file_list_new" ]
then
    echo No documents need to be backups
    exit
fi

des_file=$HOME/archive/$(date +%Y%m%d).tar.gz

echo "source:"$file_list_new 
echo "destination:"$des_file 

tar -zcf $des_file $file_list_new 

gawk使用方法:https://blog.csdn.net/weixin_37703001/article/details/140106872

2.3 file_to_backup.txt文件内容
$ cat < $HOME/archive/file_to_backup.txt
/home/ubuntu/src
/home/ubuntu/notexists
2.4 运行
$ ./backup.sh
warning: /home/ubuntu/notexists not exists or not a directory!
source: /home/ubuntu/src
destination:/home/ubuntu/archive/20240701.tar.gz
tar: Removing leading `/' from member names

tar有一条警告信息,指出它删除了路径中的斜杠 /,这意味着将绝对路径改成了相对路径。

$ ls -l ./archive
total 348
-rw-rw-r-- 1 ubuntu ubuntu  95491 Jul  1 21:21 20240701.tar.gz
-rw-rw-r-- 1 ubuntu ubuntu     39 Jul  1 21:21 file_to_backup.txt
-rw-rw-r-- 1 ubuntu ubuntu 252721 Jul  1 20:20 test.tar.gz

$ tar -t -f ./archive/20240701.tar.gz
home/ubuntu/src/
home/ubuntu/src/test_tcp/
home/ubuntu/src/test_tcp/main
home/ubuntu/src/test_tcp/client.cpp
home/ubuntu/src/bbb
home/ubuntu/src/test_so.cpp
home/ubuntu/src/kmp/
home/ubuntu/src/kmp/kmp.cpp
home/ubuntu/src/kmp/main
home/ubuntu/src/kmp/CMakeLists.txt
home/ubuntu/src/kmp/main.cpp
home/ubuntu/src/kmp/kmp.h

在archive目录下生成了文件20240701.tar.gz。

3.定时任务

定时执行程序 可使用 at 命令或 cron 时间表。

at 命令和 cron 时间表使用方法请参考 https://blog.csdn.net/weixin_37703001/article/details/139650802

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值