我是靠谱客的博主 野性电源,这篇文章主要介绍Linux 归档数据文件脚本归档数据文件,现在分享给大家,希望可以做个参考。

归档数据文件

在使用 Linux 系统时,一个和常见的需求是归档指定目录的文件。本文简要介绍如何创建自动化 shell 脚本来获取指定目录的快照并保留旧数据的归档。
Linux 归档数据的主要工具是 tar 命令。tar 命令可以将整个目录归档到单个文件中。比如:

复制代码
1
2
3
4
5
6
7
zzz@ubuntu:~/my_learning$ tar -cf archive.tar /home/zzz/my_learning/file* tar: 从成员名中删除开头的“/” tar: 从硬连接目标中删除开头的“/” zzz@ubuntu:~/my_learning$ ls -l archive.tar -rw-rw-r-- 1 zzz zzz 10240 May 18 18:39 archive.tar zzz@ubuntu:~/my_learning$

tar 会显示一天警告信息,表明它删除了路径开头的斜线,将路径从绝对路径保存为相对路径,这样可以将该文件解压到文件系统的任何地方。
tar 归档文件会消耗大量的磁盘空间,最好能够压缩一下该文件,此时可以添加 -z 选项。此时,tar 会将文件压缩成 gzip 格式的 tar 文件,也叫做 tarball。

复制代码
1
2
3
4
5
6
7
zzz@ubuntu:~/my_learning$ tar -zcf archive.tar.gz /home/zzz/my_learning/file* tar: 从成员名中删除开头的“/” tar: 从硬连接目标中删除开头的“/” zzz@ubuntu:~/my_learning$ ls -l archive.tar.gz -rw-rw-r-- 1 zzz zzz 219 May 18 18:44 archive.tar.gz zzz@ubuntu:~/my_learning

1. 备份文件准备

在归档数据时,常常需要按日或按时等,定期归档。为了区分每个时间点的归档文件,需要对归档文件的命名和存储文件夹进行适当处理。
将待备份的文件和目录放到备份文件 BACKUP 中:

复制代码
1
2
3
4
5
6
zzz@ubuntu:~/my_learning$ cat /archive/hourly/BACK_FILE /home/zzz/my_learning/test1.sh /home/zzz/my_learning/test2.sh /home/zzz/my_learning/test3.sh zzz@ubuntu:~/my_learning$

在脚本文件中使用时间戳命名归档文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
zzz@ubuntu:~/my_learning$ cat hourly_archive.sh #!/bin/bash # # Every hour create an archive # ######################################## # # set configuration file # ######################################## # CONFIG_FILE=/archive/hourly/BACK_FILE # BASEDEST=/archive/hourly # DAY=$(date +%d) MONTH=$(date +%m) TIME=$(date +%k%M) # ######################################## # # create archive destination directory # ######################################## # mkdir -p $BASEDEST/$MONTH/$DAY # DESTINATION=$BASEDAST/$MONTH/$DAY/archive$TIME.tar.gz # ######################################## # [...]

2. 读取和检查待备份文件或目录

上面已经将要备份的文件或目录存放到 BACKUP_FILE 文件。在脚本文件中,通过重定向脚本的输入和 read 命令来逐行读取和处理要备份的文件或目录。
使用 while 循环来逐行处理每一个文件或目录,使用 $? 的值来作为 while 的循环判别条件,因为只有当 read 成功读取后 $? 为0,当值为非0时,表明 BACKUP_FILE 读取完毕。
读于每一个文件或命令,首先使用 if 语句来检查是否存在,然后决定是否将其加入到将要备份的文件列表中。如果不存在,记录下该文件或目录在 BACKUP_FILE 文件中的所在行数,用于返回提示信息。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
zzz@ubuntu:~/my_learning$ cat hourly_archive.sh #!/bin/bash # # Every hour create an archive # ######################################## # # set configuration file # ######################################## # CONFIG_FILE=/archive/hourly/BACK_FILE # BASEDEST=/archive/hourly # DAY=$(date +%d) MONTH=$(date +%m) TIME=$(date +%k%M) # ######################################## # # create archive destination directory # ######################################## # mkdir -p $BASEDEST/$MONTH/$DAY # DESTINATION=$BASEDAST/$MONTH/$DAY/archive$TIME.tar.gz # ######################################## # # main script # ######################################## exec < BACKUP_FILE FILE_LIST="" FILE_NO=1 read FILE_NAME while [ $0 -eq 0 ] do if [ -f FILE_NAME -o -d $FILE_NAME ] then FILE_LIST="$FILE_LIST $FILE_NAME" else echo "$FILE_NAME, doesn't exist." echo "It is listed on line $FILE_NO of the config file." fi FILE_NO=$[$FILE_NO + 1] read FILE_NAME done # ######################################## # # backup file # ####################################### # tar -zcf $DESTINATION $FILE_LIST 2> /dev/null echo "Archive completed" # ######################################### exit zzz@ubuntu:~/my_learning$

最后

以上就是野性电源最近收集整理的关于Linux 归档数据文件脚本归档数据文件的全部内容,更多相关Linux内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(106)

评论列表共有 0 条评论

立即
投稿
返回
顶部