我是靠谱客的博主 野性电源,最近开发中收集的这篇文章主要介绍Linux 归档数据文件脚本归档数据文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

归档数据文件

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

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。

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 中:

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$

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

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 文件中的所在行数,用于返回提示信息。

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 归档数据文件脚本归档数据文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部