Если вы разработчик, вам может помочь генеративный искусственный интеллект (GenAI). Однако все платформы искусственного интеллекта имеют максимальный размер файла и ограничивают количество файлов, которые вы можете загрузить. Это может быть проблематично, если вы работаете с каталогом, который может содержать десятки небольших и хорошо организованных файлов.
Я неоднократно сталкивался с этой проблемой при работе с плагинами WordPress или модами дочерних тем. Я начал задаваться вопросом, есть ли простой способ объединить весь код и организовать его в текстовые файлы, которые можно было бы легко загрузить. И это было!
Содержание
Шелл-скрипт для объединения файлов кода
Я разработал это minify.sh
сценарий оболочки, который можно запустить в Linux, Unix или MacOS с терминала в рабочей папке команды. Я использовал его для загрузки кода для проверки в Gemini, ChatGPT и Claude без проблем.
#!/bin/bash
# Configuration
MAX_SIZE=$((650 * 1024)) # 650KB in bytes
FILE_EXTENSIONS=("php" "js" "html" "css")
# Get current folder name for output prefix
OUTPUT_PREFIX=$(basename "$(pwd)")
# Initialize variables for each file type
declare -A file_counters=( ["php"]=1 ["js"]=1 ["html"]=1 ["css"]=1 )
declare -A current_sizes=( ["php"]=0 ["js"]=0 ["html"]=0 ["css"]=0 )
declare -A output_files
# Function to minify content based on file type
minify_content() {
local file=$1
local extension="${file##*.}"
local content
case "$extension" in
php)
content=$(cat "$file" | \
sed -e 's/\/\*.*\*\///g' \
-e 's/\/\/.*$//' \
-e '/^[[:space:]]*$/d' \
-e 's/[[:space:]]\+/ /g' \
-e 's/> >' \
-e 's/\r//g')
;;
js)
content=$(cat "$file" | \
sed -e 's/\/\*.*\*\///g' \
-e 's/\/\/.*$//' \
-e '/^[[:space:]]*$/d' \
-e 's/[[:space:]]\+/ /g' \
-e 's/;[[:space:]]/;/g' \
-e 's/,[[:space:]]/,/g' \
-e 's/\r//g')
;;
css)
content=$(cat "$file" | \
sed -e 's/\/\*.*\*\///g' \
-e '/^[[:space:]]*$/d' \
-e 's/[[:space:]]\+/ /g' \
-e 's/:[[:space:]]/:/g' \
-e 's/,[[:space:]]/,/g' \
-e 's/;[[:space:]]/;/g' \
-e 's/{[[:space:]]*/{/g' \
-e 's/}[[:space:]]*/}/g' \
-e 's/[[:space:]]*{/{/g' \
-e 's/[[:space:]]*}/}/g' \
-e 's/\r//g')
;;
html)
content=$(cat "$file" | \
sed -e 's///g' \
-e '/^[[:space:]]*$/d' \
-e 's/[[:space:]]\+/ /g' \
-e 's/> >' \
-e 's/\r//g')
;;
esac
echo "$content"
}
# Function to write file header
write_file_header() {
local full_path=$1
local type=$2
echo "/* File: $full_path */" >> "${output_files[$type]}"
}
# Function to process files of a specific type
process_file_type() {
local type=$1
local counter_ref="file_counters[$type]"
local size_ref="current_sizes[$type]"
# Initialize first file for this type
output_files[$type]="${OUTPUT_PREFIX}-${type}-${file_counters[$type]}.txt"
find . -type f -name "*.$type" -print0 | while IFS= read -r -d '' file; do
# Minify and get content
local minified_content=$(minify_content "$file")
local file_size=${#minified_content}
# Check if we need to start a new file
if (( current_sizes[$type] + file_size > MAX_SIZE )) && (( current_sizes[$type] > 0 )); then
echo "Size limit reached for $type (${current_sizes[$type]} bytes). Creating new file..."
file_counters[$type]=$((file_counters[$type] + 1))
output_files[$type]="${OUTPUT_PREFIX}-${type}-${file_counters[$type]}.txt"
current_sizes[$type]=0
fi
# Process the file
echo "Processing $type file: $file (Original size: $(wc -c > "${output_files[$type]}"
echo -e "\n" >> "${output_files[$type]}"
current_sizes[$type]=$((current_sizes[$type] + file_size))
echo "Current $type file size: ${current_sizes[$type]} bytes"
done
}
# Main execution
echo "Starting file minification and combination process..."
echo "Using folder name '${OUTPUT_PREFIX}' as prefix for output files..."
# Process each file type separately
for type in "${FILE_EXTENSIONS[@]}"; do
echo "Processing $type files..."
process_file_type "$type"
done
echo "Processing complete! Files have been minified and combined by type."
echo "Generated files:"
ls -lh ${OUTPUT_PREFIX}-*.txt
Конфигурация
Скрипт начинается с определения некоторых ключевых параметров:
MAX_SIZE
: эта переменная устанавливает максимальный размер (650 КБ) для каждого выходного файла. Это гарантирует, что объединенные файлы не станут слишком большими для обработки.FILE_EXTENSIONS
: в этом массиве перечислены типы файлов, которые будет обрабатывать скрипт: PHP, JavaScript, HTML и CSS.OUTPUT_PREFIX
: он умело использует имя текущей папки в качестве префикса для выходных файлов, сохраняя порядок.
Механизм минимизации
Сердце сценария находится minify_content
функция. Он принимает файл в качестве входных данных и использует строку в зависимости от его расширения. sed
команды для удаления комментариев, ненужных пробелов и разрывов строк. В результате получается сжатая версия исходного кода.
Обработка и объединение файлов
В скрипте используются ассоциативные массивы (declare -A
), чтобы отслеживать счетчики файлов, текущие размеры файлов и имена выходных файлов для каждого типа файлов. process_file_type
Функция перебирает каждый тип файла и делает следующее:
- Находит все файлы: Он использует
find
команда для поиска всех файлов с указанным расширением. - Уменьшить содержание: Это называется
minify_content
функция сжатия файлов. - Проверяет размер файла: Это гарантирует, что текущее добавление файла не превысит
MAX_SIZE
. Если это так, создается новый выходной файл. - В файле шаблона: Он добавляет заголовок с путем к исходному файлу для целей отладки и добавляет уменьшенное содержимое в выходной файл.
Собираем все это вместе
Основная часть выполнения скрипта проходит через FILE_EXTENSIONS
массив при вызове process_file_type
функция для каждого. Я даже разбираю разные типы кода в разные файлы (PHP, JS, CSS, HTML), чтобы было проще. Работаете над проблемой PHP? Просто загрузите файл PHP и игнорируйте все остальное. Наконец, в нем перечислены сгенерированные файлы с указанием их размеров.
Сочетание минимизации и слияния файлов значительно уменьшает размер файла и количество файлов для загрузки на вашу любимую генеративную платформу искусственного интеллекта.
Как использовать этот сценарий оболочки
- Сохраните скрипт: Скопируйте код, приведенный в статье, вставьте его в текстовый редактор и сохраните файл с расширением
.sh
расширение (напримерminify.sh
). - Сделайте его исполняемым: Откройте терминал или командную строку, перейдите в каталог, в котором вы сохранили скрипт, используя
cd
команду и сделайте скрипт исполняемым, выполнив:chmod +x minify.sh
. - Перейти в каталог: использовать
cd
команда для перехода в каталог с вашим кодом. Один из простых способов сделать это — написатьcd
и перетащите папку из окна Finder на свой терминал.
cd /Users/douglaskarr/Documents/my-folder
- Запустите скрипт: Запустите скрипт, введя путь, по которому
minify.sh
находится и нажмите Enter.
/Users/douglaskarr/Documents/minify.sh
- Скрипт выведет следующее:
- Сообщения о ходе обработки каждого типа файлов.
- Информация об исходных и уменьшенных размерах файлов.
- Уведомления при создании новых выходных файлов из-за ограничений размера.
- Список сгенерированных файлов с их размерами.
- Найдите выходные файлы:
- Объединенные и минимизированные файлы будут находиться в том же каталоге, где вы запускали скрипт.
- Им будут присвоены имена с использованием имени текущей папки в качестве префикса, за которым следуют тип файла и счетчик (например,
myfolder-js-1.txt
,myfolder-css-2.txt
).
Важные примечания:
- Типы файлов: В настоящее время скрипт обрабатывает файлы PHP, JavaScript, HTML и CSS. Вы можете изменить
FILE_EXTENSIONS
массив в скрипте, чтобы при необходимости включить другие типы файлов. - Максимальный размер файла:
MAX_SIZE
Переменная определяет максимальный размер каждого выходного файла. Отрегулируйте это значение, если вам нужны объединенные файлы большего или меньшего размера. - Зависимости: Этот сценарий основан на
sed
команда, обычно доступная в Unix-подобных системах. Если вы используете Windows, убедитесь, что у вас есть подходящая среда, например WSL, Cygwin или Git Bash. - Настройка: Вы можете дополнительно настроить правила сокращения в
minify_content
функция, отвечающая вашим конкретным требованиям. - Резервное копирование: На всякий случай перед запуском этого сценария всегда полезно создать резервную копию исходных файлов.
Выполнив эти простые шаги, вы сможете использовать возможности этого сценария Bash для объединения и минимизации вашего кода для проверки на вашей платформе искусственного интеллекта.