递归备份指定目录下的文件,已备份过且未更新则不备份。
使用:
将以下脚本保存到一个脚本文件中,并加上可执行权限。然后执行此脚本文件,第一个参数为需要备份的文件,第二个参数为备份的目的地。
如保存到backupScript.sh中,执行./backupScript.sh 需要备份的文件 备份的目的地
#!/bin/bash
backUp(){
local sourceDir=$1 #需要备份的文件/目录
local destDir=$2 #备份目的地
if [ -d "$sourceDir" ] #备份目录
then
#如果目录尚未备份,则创建此目录
if [ ! -d "$destDir/$sourceDir" ]
then
echo -e "创建目录\t$sourceDir"
mkdir -p "$destDir/$sourceDir"
fi
#对目录中对每一个文件,递归调用此函数进行备份
for var in $(ls "$sourceDir")
do
backUp "$sourceDir/$var" "$destDir"
done
else #备份文件
#如果文件在尚未备份,则直接复制
if [ ! -f "$destDir/$sourceDir" ]
then
echo -e "备份文件\t$sourceDir"
cp "$sourceDir" "$destDir/$sourceDir"
else
#如果文件已存在,则比较两个文件对最后修改时间,如果文件已修改,则更新文件
lastModifi_backup=$(date -r "$destDir/$sourceDir" +%s)
lastModifi_current=$(date -r "$sourceDir" +%s)
if [ "$lastModifi_current" -gt "$lastModifi_backup" ]
then
echo -e "更新文件\t$sourceDir"
cp "$sourceDir" "$destDir/$sourceDir"
fi
fi
fi
}
backUp "$1" "$2"