diff options
| author | Craig Jennings <c@cjennings.net> | 2025-07-16 11:04:24 -0500 | 
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2025-07-16 11:04:24 -0500 | 
| commit | 0dbbb3a9f1153b05892c4217dbc583109abba3da (patch) | |
| tree | bb574723ff33fb88a0c2cf4f62a95e8ae4fb0a4d /dotfiles/system/.local | |
| parent | 53d647fbe92b9f1f8cdb8b3c10e82c35ac8b0583 (diff) | |
adding dab utility and zurich wireguard config
Diffstat (limited to 'dotfiles/system/.local')
| -rwxr-xr-x | dotfiles/system/.local/bin/dab | 72 | 
1 files changed, 72 insertions, 0 deletions
| diff --git a/dotfiles/system/.local/bin/dab b/dotfiles/system/.local/bin/dab new file mode 100755 index 0000000..e7d0fae --- /dev/null +++ b/dotfiles/system/.local/bin/dab @@ -0,0 +1,72 @@ +#!/bin/env bash +# dab - delete all but +# Craig Jennings <c@cjennings.net> +# deletes all files in current directory that are NOT of a specific extension + +# default switch values +recurse="" +del_dirs="" + +# help function +show_help() { +    echo "Usage: $0 [extension] [OPTION]" +    echo "Deletes all files that do not match the given extension from the current directory." +    echo "" +    echo "Options:" +    echo "-r  Delete files in directories recursively." +    echo "-d  Delete directories if they become empty after deletions." +    echo "-h  Display this help message and exit." +    echo "" +    echo "Example: $0 txt -r -d" +    echo "This would delete all non-text files in the current directory and subdirectories. Any directories emptied by this process will also be deleted." +    echo "" +    echo "Note: Directories that were previously empty will remain untouched." +} + +# if help was requested, show it and exit +if [[ $1 = "-h" ]] || [[ $2 = "-h" ]] || [[ $3 = "-h" ]]; then +    show_help +    exit +fi + +# error if nothing or * was passed +if [[ -z $1 ]] || [[ $1 = "*" ]]; then +    echo "ERROR: No file extension was provided or invalid extension ('*')." +    show_help +    exit +fi + +# identify rest of arguments +ext=$1 +if [[ $2 == *"-r"* ]] || [[ $3 == *"-r"* ]]; then +    recurse="-R" +fi + +if [[ $2 == *"-d"* ]] || [[ $3 == *"-d"* ]]; then +    del_dirs="true" +fi + +# Save empty directories into an array before deleting the files +empty_dirs=() +while IFS=  read -r -d $'\0'; do +    empty_dirs+=("$REPLY") +done < <(find . -type d -empty -print0) + +shopt -s globstar nullglob extglob + +# remove non-matching files +for file in **; do +    if [[ -f "$file" ]] && [[ "$file" != *".$ext" ]]; then +        rm "$file" +    fi +done + +# remove directories emptied by this operation +if [[ $del_dirs == "true" ]]; then +    for dir in **/; do +        if [[ ! -n "$(ls -A $dir)" ]] && [[ ! "${empty_dirs[*]}" =~ $dir ]]; then +            rmdir "$dir" +        fi +    done +fi + | 
