Improve symclone's safety
Make sure files are not overwritten, and that symlinks would be reapplied - allowing re-application of already existing links
This commit is contained in:
parent
20555a91c9
commit
d2c18372f4
13
symclone.sh
13
symclone.sh
|
@ -6,7 +6,15 @@ set -e
|
||||||
SRC_DIR=_src.posix
|
SRC_DIR=_src.posix
|
||||||
|
|
||||||
# Target directory (new structure with symlinks)
|
# Target directory (new structure with symlinks)
|
||||||
DEST_DIR="${1:?}"
|
DEST_DIR="${1}"
|
||||||
|
|
||||||
|
is_cmd() {
|
||||||
|
type -p -- "${@}" 2> /dev/null 1> /dev/null
|
||||||
|
}
|
||||||
|
if is_cmd chezmoi && [ -z "$DEST_DIR" ]; then
|
||||||
|
DEST_DIR="$(chezmoi data | jq -r '.chezmoi.sourceDir | split("/") | last')"
|
||||||
|
fi
|
||||||
|
DEST_DIR="${DEST_DIR:?Must supply dest dir name}"
|
||||||
|
|
||||||
# Check if both arguments are provided
|
# Check if both arguments are provided
|
||||||
if [[ -z "$SRC_DIR" || -z "$DEST_DIR" ]]; then
|
if [[ -z "$SRC_DIR" || -z "$DEST_DIR" ]]; then
|
||||||
|
@ -52,7 +60,8 @@ find "$SRC_DIR" -type f | while read -r file; do
|
||||||
src_relative_path=$(relpath "$file" "$(dirname "$DEST_DIR/$target_file")")
|
src_relative_path=$(relpath "$file" "$(dirname "$DEST_DIR/$target_file")")
|
||||||
|
|
||||||
# Create the symlink with relative path
|
# Create the symlink with relative path
|
||||||
ln -vs "$src_relative_path" "$DEST_DIR/$target_file"
|
[ -L "$DEST_DIR/$target_file" ] || ! [ -e "$DEST_DIR/$target_file" ] \
|
||||||
|
&& ln ${FORCE} -vs "$src_relative_path" "$DEST_DIR/$target_file"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Symbolic links created successfully in '$DEST_DIR'."
|
echo "Symbolic links created successfully in '$DEST_DIR'."
|
||||||
|
|
Loading…
Reference in New Issue