From ab07e6bd7166f9b4bf0eb760bf43ccefd785b0e2 Mon Sep 17 00:00:00 2001 From: Janik von Rotz Date: Sun, 23 Nov 2025 15:51:28 +0100 Subject: [PATCH] feat(task): add symlink and directory management utilities - Introduce `create-symlink`, `create-symlink-dir`, and `create-symlink-files` functions for managing symlinks - Add `ensure-directory` utility to ensure directory paths exist - Document new file management utilities in `library.md` - Follow existing code style and documentation format --- bin/create-symlink | 18 ++++++++++++++++++ bin/create-symlink-dir | 18 ++++++++++++++++++ bin/create-symlink-files | 25 +++++++++++++++++++++++++ bin/ensure-directory | 6 ++++++ library.md | 26 ++++++++++++++++++++++++++ 5 files changed, 93 insertions(+) create mode 100755 bin/create-symlink create mode 100755 bin/create-symlink-dir create mode 100755 bin/create-symlink-files create mode 100755 bin/ensure-directory diff --git a/bin/create-symlink b/bin/create-symlink new file mode 100755 index 0000000..d171aeb --- /dev/null +++ b/bin/create-symlink @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +create-symlink() { + local source="$1" + local target="$2" + + # Remove existing file/directory if it exists + if [[ -e "$target" || -L "$target" ]]; then + rm -rf "$target" + fi + + # Create parent directory if needed + local parent_dir=$(dirname "$target") + ensure-directory "$parent_dir" + + # Create the symlink + ln -sf "$source" "$target" +} \ No newline at end of file diff --git a/bin/create-symlink-dir b/bin/create-symlink-dir new file mode 100755 index 0000000..43d8045 --- /dev/null +++ b/bin/create-symlink-dir @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +create-symlink-dir() { + local source_dir="$1" + local target_dir="$2" + + # Remove existing directory if it exists + if [[ -e "$target_dir" || -L "$target_dir" ]]; then + rm -rf "$target_dir" + fi + + # Create parent directory if needed + local parent_dir=$(dirname "$target_dir") + ensure-directory "$parent_dir" + + # Create symlink to directory + ln -sf "$source_dir" "$target_dir" +} \ No newline at end of file diff --git a/bin/create-symlink-files b/bin/create-symlink-files new file mode 100755 index 0000000..8f1d32a --- /dev/null +++ b/bin/create-symlink-files @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +create-symlink-files() { + local source_pattern="$1" + local target_dir="$2" + + # Create target directory + ensure-directory "$target_dir" + + # Link each file in the source pattern + for source_file in $source_pattern; do + if [[ -f "$source_file" ]]; then + local filename=$(basename "$source_file") + local target_file="$target_dir/$filename" + + # Remove existing file if it exists + if [[ -e "$target_file" || -L "$target_file" ]]; then + rm -f "$target_file" + fi + + # Create the symlink + ln -sf "$source_file" "$target_file" + fi + done +} \ No newline at end of file diff --git a/bin/ensure-directory b/bin/ensure-directory new file mode 100755 index 0000000..8bd54dd --- /dev/null +++ b/bin/ensure-directory @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +ensure-directory() { + local dir="$1" + [[ ! -d "$dir" ]] && mkdir -p "$dir" +} \ No newline at end of file diff --git a/library.md b/library.md index 0325cf3..a7bc118 100644 --- a/library.md +++ b/library.md @@ -64,6 +64,32 @@ printf "$column" 'open-with-os' '' 'Open file or url with default application.' printf "$column" 'open-url-with-delay' '[url][delay]' 'Open url after n seconds.' ``` +## Files + +### ensure-directory + +```bash +printf "$column" 'ensure-directory' '[path]' 'Ensure directory path exists.' +``` + +### create-symlink + +```bash +printf "$column" 'create-symlink' '[source][target]' 'Remove existing file/directory and create symlink.' +``` + +### create-symlink-dir + +```bash +printf "$column" 'create-symlink-dir' '[source][target]' 'Remove existing directory and create symlink.' +``` + +### create-symlink-files + +```bash +printf "$column" 'create-symlink-files' '[source][target]' 'Create symlink for files in source pattern.' +``` + ## Python ### activate-venv