#!/bin/bash # Path to llama-gguf-split SPLIT_TOOL=~/git/llama.cpp/build/bin/llama-gguf-split # Define the 40GB limit in bytes LIMIT_BYTES=42949672960 # 40GB (1024^3 * 40) echo "Starting GGUF splitting for files > 40GB..." echo "----------------------------------------" # Find all .gguf files in the current directory find . -maxdepth 1 -name "*.gguf" -print0 | while IFS= read -r -d $'\0' FILE; do # Remove leading ./ for cleaner filename display FILE_NAME=${FILE#./} # Skip Ina-v11.1-F16.gguf (original F16 file) if [[ "$FILE_NAME" == "Ina-v11.1-F16.gguf" ]]; then echo "Skipping original F16 file: $FILE_NAME" continue fi # Get file size FILE_SIZE=$(stat -f%z "$FILE_NAME") if [ "$FILE_SIZE" -gt "$LIMIT_BYTES" ]; then echo "Processing: $FILE_NAME (Size: $(numfmt --to=iec-i --suffix=B "$FILE_SIZE"))" # Create directory name (remove .gguf extension) DIR_NAME="${FILE_NAME%.gguf}" mkdir -p "$DIR_NAME" echo " Created directory: $DIR_NAME" echo " Splitting '$FILE_NAME' into '$DIR_NAME/'..." # Change to the new directory to run the split command pushd "$DIR_NAME" > /dev/null # Run split command: GGUF_IN is relative path, GGUF_OUT is basename as prefix "$SPLIT_TOOL" --split-max-size 40G "../$FILE_NAME" "$(basename "$FILE_NAME" .gguf)" SPLIT_EXIT=$? # Change back to original directory popd > /dev/null if [ $SPLIT_EXIT -eq 0 ]; then echo "✅ Split successful. Removing original large file: $FILE_NAME" rm "$FILE_NAME" else echo "❌ Splitting failed for $FILE_NAME (Error code: $SPLIT_EXIT). Keeping original file." fi else echo "Skipping $FILE_NAME (Size: $(numfmt --to=iec-i --suffix=B "$FILE_SIZE")) - smaller than 40GB." fi echo "----------------------------------------" done echo "GGUF splitting complete."