pantheon/bin/consolidate
2025-02-06 16:29:20 +08:00

53 lines
No EOL
2.1 KiB
Bash
Executable file

#!/bin/bash
# Start the process.
echo "Consolidating..."
# Check for input:
# If the user provides any arguments, store those as the list of file extensions to look for.
# If no arguments are given, set a default list of extensions such as "txt", "sh", "md", and "csv".
EXTENSIONS=()
# Prepare a temporary file:
# Create a temporary file that will hold patterns from the ".gitignore" file.
# Read the .gitignore file:
# If the ".gitignore" file is present, read it and pull out lines that are not comments or blank.
# Store these patterns in the temporary file.
# Create an output file:
# Get the current date and time, and create an output file named using this timestamp.
### Find files:
# The regex pattern starts with '.*', which searches for any matching characters.
# '.' is a wildcard, while '*' means match as many occurrences of the preceding char.
# '\.' escapes the '.' special char to search for the actual char.
# () is a capturing group. The | character is an OR operator
# '$' indicates the preceding string should be followed by the end of line
if [ ${#EXTENSIONS[@]} -gt 0 ]; then
EXTENSIONS_PATTERN=$(printf '\\|%s' "${EXTENSIONS[@]}")
REGEX_EXPRESSION=".*\.\($EXTENSIONS_PATTERN\)$"
echo "Regex Expression: $REGEX_EXPRESSION"
else
REGEX_EXPRESSION=".*$"
fi
# Look for all files in the current directory and its subdirectories,
# excluding the ".gitignore" file itself.
find . -regex $REGEX_EXPRESSION
# Filter these files based on the specified extensions.
# Exclude any files that appear to be binary.
# Exclude any files that match patterns listed in the ".gitignore".
# Process each file:
# For each file that matches the criteria:
# - Write a header to the output file that includes the filename.
# - Add the content of the file to the output file.
# - Finish with a closing code block marker.
# Clean up:
# Delete the temporary file holding the patterns from the ".gitignore".
# Complete the process:
# Inform the user that the operation is complete and let them know where the consolidated output has been saved.
echo "Consolidation complete! See your output file at: "