diff options
Diffstat (limited to 'files')
-rw-r--r-- | files | 153 |
1 files changed, 153 insertions, 0 deletions
@@ -0,0 +1,153 @@ +#!/usr/bin/env bash +# +# files - functions acting on files. +# +# Copyright 2015 - 2019 Einhard Leichtfuß +# +# This file is part of rsync-backup. +# +# rsync-backup is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# rsync-backup 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with rsync-backup. If not, see <https://www.gnu.org/licenses/>. +# + + +# Create directory, unless it exists already. Returns non-zero, if the +# named file exists however is not a directory. +# +# $1: directory: path +# +function create_dir +{ + local dir="$1" + + if [[ ! -e "$dir" && ! -L "$dir" ]] + then + mkdir "$dir" || return $RET_ERROR + elif [[ ! -d "$dir" || -L "$dir" ]] + then + error "\"$dir\" is not a directory." + return $RET_FILE_ERR + fi + + return $RET_SUCCESS +} + + +# Create a new directory, assuring it did not exist before. +# +# $1: directory: path +# +function create_new_dir +{ + local dir="$1" + + if [[ -e "$dir" || -L "$dir" ]] + then + error "\"$dir\" exists already." + return $RET_FILE_ERR + fi + + mkdir "$dir" || return $RET_ERROR + + return $RET_SUCCESS +} + + +# Verify the specified file is a directory. +# +# $1: directory: path +# +function assert_is_dir +{ + local dir="$1" + + if [[ ! -d "$dir" || -L "$dir" ]] + then + error "\"$dir\" is not a directory." + return $RET_FILE_ERR + fi + + return $RET_SUCCESS +} + + +# Replace symbolic link $2 by symbolic link $1. $2 may not exist. +# +# $1: source file name: path +# $2: target file name: path +# +function replace_symlink +{ + local src="$1" + local tgt="$2" + + if [[ ! -L "$src" ]] + then + error "\"$src\" is not a symbolic link." + return $RET_FILE_ERR + fi + + if [[ ! -L "$tgt" && -e "$tgt" ]] + then + error "\"$tgt\" is not a symbolic link." + return $RET_FILE_ERR + fi + + mv -T "$src" "$tgt" || return $RET_ERROR + + return $RET_SUCCESS +} + + +# Replace symbolic link $1's target by $2. $1 may not exist. +# +# $1: link file: path +# $2: link target: path +# +function replace_symlink_target +{ + local link="$1" + local tgt="$2" + + if [[ ! -L "$link" && -e "$link" ]] + then + error "\"$link\" is not a symbolic link." + return $RET_FILE_ERR + fi + + ln -sfT "$tgt" "$link" || return $RET_ERROR + + return $RET_SUCCESS +} + + +# Remove a symbolic link. +# +# $1: link: path +# +function remove_symlink +{ + local file="$1" + + if [[ ! -L "$file" ]] + then + error "\"$file\" is not a symbolic link." + return $RET_FILE_ERR + fi + + rm "$file" || return $RET_ERROR + + return $RET_SUCCESS +} + +# vi: ft=bash ts=2 sw=2 noet |