aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/.bash_utils/file.sh
diff options
context:
space:
mode:
Diffstat (limited to '.bash_utils/file.sh')
-rw-r--r--.bash_utils/file.sh35
1 files changed, 35 insertions, 0 deletions
diff --git a/.bash_utils/file.sh b/.bash_utils/file.sh
new file mode 100644
index 0000000..0321833
--- /dev/null
+++ b/.bash_utils/file.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2016 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "Cygwin configuration files" project.
+# For details, see https://github.com/egor-tensin/cygwin-home.
+# Distributed under the MIT License.
+
+swap_files() (
+ set -o errexit -o nounset -o pipefail
+
+ if [ "$#" -ne 2 ]; then
+ echo "usage: ${FUNCNAME[0]} PATH1 PATH2" >&2
+ return 1
+ fi
+
+ local path1="$1"
+ local path2="$2"
+
+ if [ ! -f "$path1" ]; then
+ echo "${FUNCNAME[0]}: must be a regular file: $path1" >&2
+ return 1
+ fi
+
+ if [ ! -f "$path2" ]; then
+ echo "${FUNCNAME[0]}: must be a regular file: $path2" >&2
+ return 1
+ fi
+
+ local tmp_path
+ tmp_path="$( mktemp "$( dirname "$path1" )/XXX" )"
+
+ mv "$path1" "$tmp_path"
+ mv "$path2" "$path1"
+ mv "$tmp_path" "$path2"
+)