56 lines
1.4 KiB
Bash
Executable File
56 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Script to generate HTML index files for directories using 'tree'
|
|
|
|
# Array of dirs to exclude
|
|
exclude_paths=(
|
|
"! -path */.git*"
|
|
)
|
|
|
|
# Collect directories into array using null-separated output
|
|
mapfile -d '' dirs < <(find "$@" -type d ${exclude_paths[@]} -print0)
|
|
|
|
# Check array for existing index made by 'tree' (rc=0) or nonexistent (rc=2)
|
|
for i in "${!dirs[@]}"; do
|
|
grep -qsm1 "Made by 'tree'" "${dirs[i]}/index.html"
|
|
if [ $? -eq 1 ]; then
|
|
unset 'dirs[i]'
|
|
fi
|
|
done
|
|
|
|
# Reset array
|
|
dirs=( "${dirs[@]}" )
|
|
|
|
# List dirs
|
|
echo "Index will be created in:"
|
|
printf '%s\n' "${dirs[@]}"
|
|
echo
|
|
|
|
# Get confirm for creation of index
|
|
read -n1 -p "Continue? (y/N) " confirm
|
|
if ! echo "$confirm" | grep -q '^[Yy]$'; then
|
|
echo -e "\nAborting!"; exit 1
|
|
fi
|
|
echo
|
|
|
|
# Create the indexes
|
|
for dir in "${dirs[@]}"; do
|
|
echo "Creating index in $dir"
|
|
(
|
|
cd "$dir" || exit 1
|
|
|
|
# Generate HTML index - Color, Date, Size(h), No lines(i), Title(T), filter self(I)
|
|
# Pipe to sed: Remove credits, link to parent dir, change colours
|
|
tree -CDhi -H "." -T "$(basename "$PWD")" -I "index.html" -L 1 \
|
|
--dirsfirst --charset "utf-8" \
|
|
| sed \
|
|
-e '/<hr>/,+7d' \
|
|
-e 's/href="\.">\./href="..">../' \
|
|
-e 's/BODY {/BODY { color: lime; background: black;/' \
|
|
-e 's/color: black;/color: lime;/' \
|
|
-e 's/color: blue;/color: deepskyblue;/' \
|
|
-e 's/color: green;/color: limegreen;/' \
|
|
-e 's/color: purple;/color: mediumpurple;/' \
|
|
> index.html
|
|
)
|
|
done
|