sync/scripts/import_single_file.bash

42 lines
1.3 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
# this script is supposed to apply changes in /sync/{home,root}_external to /sync/{home,root}_external and thus to / resp. ~/
# FIXME!!! WIP
# FIXME!!! syncing root stuff not yet implemented
# FIXME!!! user name/ group name/ home dir hard coded for now...
externalDir=/sync/home_external/
internalDir=/sync/home_internal/
userHome=/home/fabian/
user=fabian
group=fabian
if [[ -z "$1" ]]; then
echo "Error. No file(s) for import given"
exit 1
fi
file="$(find $internalDir -name $1)"
# if a file is merely changed, copy its content into the existing target directory
if [[ -e "$file" ]]; then
echo "copying file content of $1 to $file"
cat $1 > $file
exit 0
fi
# if a new file/ dir is created, copy it into the $internalDir retaining the relative path
# after that, copy/ hard link it to the $userHome directory and assign the correct user/ group
# NOTE: one could solve that by having the same user + group on every system
relPath="$(realpath --relative-to=$externalDir $1)" # should also contain the leaf name
echo "new file/dir. relative path: $relPath"
if [[ -f "$1" ]]; then
install -Dv $1 "$internalDir$relPath"
else
mkdir -pv "$internalDir$relPath"
fi
cp -lrv "$internalDir$relPath" $userHome
chown -v "$user:$group" "$userHome$relPath"
exit 0