Если вы разработчик, вам может помочь генеративный искусственный интеллект (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: он умело использует имя текущей папки в качестве префикса для выходных файлов, сохраняя порядок.
ЧИТАТЬ  Вебинар 4 шага для автономного роста бизнеса - 9 ноября 2023 г. | Цифровые мероприятия

Механизм минимизации

Сердце сценария находится minify_content функция. Он принимает файл в качестве входных данных и использует строку в зависимости от его расширения. sed команды для удаления комментариев, ненужных пробелов и разрывов строк. В результате получается сжатая версия исходного кода.

Обработка и объединение файлов

В скрипте используются ассоциативные массивы (declare -A), чтобы отслеживать счетчики файлов, текущие размеры файлов и имена выходных файлов для каждого типа файлов. process_file_type Функция перебирает каждый тип файла и делает следующее:

  1. Находит все файлы: Он использует find команда для поиска всех файлов с указанным расширением.
  2. Уменьшить содержание: Это называется minify_content функция сжатия файлов.
  3. Проверяет размер файла: Это гарантирует, что текущее добавление файла не превысит MAX_SIZE. Если это так, создается новый выходной файл.
  4. В файле шаблона: Он добавляет заголовок с путем к исходному файлу для целей отладки и добавляет уменьшенное содержимое в выходной файл.

Собираем все это вместе

Основная часть выполнения скрипта проходит через FILE_EXTENSIONS массив при вызове process_file_type функция для каждого. Я даже разбираю разные типы кода в разные файлы (PHP, JS, CSS, HTML), чтобы было проще. Работаете над проблемой PHP? Просто загрузите файл PHP и игнорируйте все остальное. Наконец, в нем перечислены сгенерированные файлы с указанием их размеров.

Сочетание минимизации и слияния файлов значительно уменьшает размер файла и количество файлов для загрузки на вашу любимую генеративную платформу искусственного интеллекта.

Как использовать этот сценарий оболочки

  1. Сохраните скрипт: Скопируйте код, приведенный в статье, вставьте его в текстовый редактор и сохраните файл с расширением .sh расширение (например minify.sh).
  2. Сделайте его исполняемым: Откройте терминал или командную строку, перейдите в каталог, в котором вы сохранили скрипт, используя cd команду и сделайте скрипт исполняемым, выполнив: chmod +x minify.sh.
  3. Перейти в каталог: использовать cd команда для перехода в каталог с вашим кодом. Один из простых способов сделать это — написать cd и перетащите папку из окна Finder на свой терминал.
cd /Users/douglaskarr/Documents/my-folder
  1. Запустите скрипт: Запустите скрипт, введя путь, по которому minify.sh находится и нажмите Enter.
/Users/douglaskarr/Documents/minify.sh 
  1. Скрипт выведет следующее:
    • Сообщения о ходе обработки каждого типа файлов.
    • Информация об исходных и уменьшенных размерах файлов.
    • Уведомления при создании новых выходных файлов из-за ограничений размера.
    • Список сгенерированных файлов с их размерами.
  1. Найдите выходные файлы:
    • Объединенные и минимизированные файлы будут находиться в том же каталоге, где вы запускали скрипт.
    • Им будут присвоены имена с использованием имени текущей папки в качестве префикса, за которым следуют тип файла и счетчик (например, myfolder-js-1.txt, myfolder-css-2.txt).
ЧИТАТЬ  ResellerRatings: обзоры и управление репутацией для интернет-маркетологов | зона Мартех

Важные примечания:

  • Типы файлов: В настоящее время скрипт обрабатывает файлы PHP, JavaScript, HTML и CSS. Вы можете изменить FILE_EXTENSIONS массив в скрипте, чтобы при необходимости включить другие типы файлов.
  • Максимальный размер файла: MAX_SIZE Переменная определяет максимальный размер каждого выходного файла. Отрегулируйте это значение, если вам нужны объединенные файлы большего или меньшего размера.
  • Зависимости: Этот сценарий основан на sed команда, обычно доступная в Unix-подобных системах. Если вы используете Windows, убедитесь, что у вас есть подходящая среда, например WSL, Cygwin или Git Bash.
  • Настройка: Вы можете дополнительно настроить правила сокращения в minify_content функция, отвечающая вашим конкретным требованиям.
  • Резервное копирование: На всякий случай перед запуском этого сценария всегда полезно создать резервную копию исходных файлов.

Выполнив эти простые шаги, вы сможете использовать возможности этого сценария Bash для объединения и минимизации вашего кода для проверки на вашей платформе искусственного интеллекта.

Source