41 lines
1.3 KiB
Bash
Executable File
41 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# 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
|