#!/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 . # # 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