-
Notifications
You must be signed in to change notification settings - Fork 41
Whitelist files
Jonas edited this page Apr 20, 2023
·
4 revisions
If you want to whitelist files instead of blacklisting files using IgnorePath
you can
define a helper function that ignores everything except a specific whitelist:
function IgnorePathsExcept() {
# Ignore all path in given directory (first parameter)
# that do not math the given white list (second parameter)
local search_dir=$1
shift
local white_list=("$@")
local find_args=()
local ignore_path
for ignore_path in "${white_list[@]}"; do
local base="$ignore_path"
# Add all base paths to the argument list as well otherwise
# -prune will prevent us from reaching the whitelisted files.
while [ "$base" != '.' ]; do
find_args+=(-path "$search_dir/$base" -o)
base="$(dirname "$base")"
done
done
# Find everything except given whitelist and the directory
# searched from.
find "$search_dir" -not \( "${find_args[@]}" -path "$search_dir" \) -prune | \
while read file; do
if [[ -d "$file" ]]; then
IgnorePath "$file/*"
else
IgnorePath "$file"
fi
done
}
Let's say you want to track only specific folders and files from your home directory (~
).
You can do this by simply defining a whitelist and using the helper function we just defined:
white_list=(
'.gitconfig'
'.zshrc'
'.config/*'
'.kde4/share/config/*'
'.zsh/*'
)
IgnorePathsExcept ~ "${white_list[@]}"
Now everything in your home directory except the given whitelist will be ignored.