Added script

This commit is contained in:
Phil 2025-06-12 08:24:56 +01:00
parent 1512a06bc1
commit b140ab96d2

71
GitThat.sh Executable file
View File

@ -0,0 +1,71 @@
#!/bin/bash
show_GitThat_help() {
echo "Usage: $0 [-h] [-d directory] [-o output_file] [-s]"
echo
echo " -h Show this help message and exit"
echo " -d <directory> Directory to search (default: current directory)"
echo " -o <output_file> File to save the output (default: stdout)"
echo " -s Search all subdirectories (recursive)"
}
# Default values
BASE_DIR="."
OUTPUT_FILE=""
RECURSIVE=false
# Parse options
while getopts ":hd:o:s" opt; do
case $opt in
h)
show_GitThat_help
exit 0
;;
d)
BASE_DIR="$OPTARG"
;;
o)
OUTPUT_FILE="$OPTARG"
;;
s)
RECURSIVE=true
;;
\?)
echo "Invalid option: -$OPTARG" >&2
show_GitThat_help
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
show_GitThat_help
exit 1
;;
esac
done
# Determine find depth option
if [ "$RECURSIVE" = true ]; then
FIND_OPTS="-type d -name .git"
else
FIND_OPTS="-maxdepth 2 -type d -name .git"
fi
# Run the search and collect results
RESULTS=""
while IFS= read -r gitdir; do
repo_dir="$(dirname "$gitdir")"
url=$(git -C "$repo_dir" config --get remote.origin.url)
if [ -n "$url" ]; then
RESULTS+="$repo_dir: $url"$'\n'
else
RESULTS+="$repo_dir: No remote.origin.url found"$'\n'
fi
done < <(find "$BASE_DIR" $FIND_OPTS)
# Output results
if [ -n "$OUTPUT_FILE" ]; then
echo "$RESULTS" > "$OUTPUT_FILE"
else
echo "$RESULTS"
fi