From 42155469350e5638b33a95fda2cccf8818bd0ea1 2020-06-29 04:18:59 From: Branko Majic <branko@majic.rs> Date: 2020-06-29 04:18:59 Subject: [PATCH] Noticket: Added a small script for creating quick backups of files before making changes to them. --- diff --git a/backup/bakit.sh b/backup/bakit.sh new file mode 100755 index 0000000000000000000000000000000000000000..07500e55955a4c24003e863c332e2975dadc5a82 --- /dev/null +++ b/backup/bakit.sh @@ -0,0 +1,106 @@ +#!/bin/bash +# +# bakit.sh +# +# Copyright (C) 2010, Branko Majic <branko@majic.rs> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +program="bakit.sh" +version="0.1" + +function usage() { + cat <<EOF +$program $version, a non-interactive utility for creating local on-system +backups of files. + +Usage: $program [OPTIONS] file + +$program is a non-interactive utility for creating local on-system backups of +files. Its primary use is for the various configuration files found on most of +the systems. It allows you to easily create a timestamped backup of files +specified as input arguments. + +$program accepts the following options: + + -v show script version and licensing information + -h show usage help + + +Please report bugs and send feature requests to <branko@majic.rs>. +EOF +} + +function version() { + cat <<EOF +$program, version $version + ++-----------------------------------------------------------------------+ +| Copyright (C) 2010, Branko Majic <branko@majic.rs> | +| | +| This program is free software: you can redistribute it and/or modify | +| it under the terms of the GNU General Public License as published by | +| the Free Software Foundation, either version 3 of the License, or | +| (at your option) any later version. | +| | +| This program is distributed in the hope that it will be useful, | +| but WITHOUT ANY WARRANTY; without even the implied warranty of | +| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | +| GNU General Public License for more details. | +| | +| You should have received a copy of the GNU General Public License | +| along with this program. If not, see <http://www.gnu.org/licenses/>. | ++-----------------------------------------------------------------------+ + +EOF +} + +# If no arguments were given, just show usage help. +if [[ -z $1 ]]; then + usage + exit 0 +fi + +# Parse the arguments +while getopts "vh" opt; do + case "$opt" in + v) version + exit 0;; + h) usage + exit 0;; + *) usage + exit 1;; + esac +done +i=$OPTIND +shift $(($i-1)) + +# Create a backup of each provided file +while [[ -n $1 ]]; do + source="$(echo "$1" | sed -e 's#/\+$##' )" + bakFile="${source}.bak.$(date +%Y%m%d)" + + # Generate a new name for the backup, making sure the old ones do not get + # overwritten + let i=1 + while [[ -e "$bakFile" ]]; do + bakFile="${source}.bak.$(date +%Y%m%d).$i" + let i=i+1 + done + + cp -pr "$source" "$bakFile" + shift +done +