2023-07-10 08:49:09 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# check brotli's installed
|
|
|
|
if ! command -v brotli &> /dev/null
|
|
|
|
then
|
|
|
|
echo "brotli tool could not be found, please make sure you have it in your path!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Exit if no argument is provided
|
|
|
|
if [ $# -eq 0 ]; then
|
|
|
|
echo "No filename provided"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
filename=$1
|
2023-10-27 08:03:58 +02:00
|
|
|
echo "#####################################"
|
2023-07-10 08:49:09 +02:00
|
|
|
echo "Compressing $1"
|
|
|
|
|
|
|
|
# Exit if the file doesn't exist
|
|
|
|
if [ ! -f "${filename}" ]; then
|
|
|
|
echo "File ${filename} not found"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
original_size_kb=$(du -k "${filename}" | cut -f1)
|
|
|
|
|
|
|
|
tmpfile=$(mktemp)
|
|
|
|
|
|
|
|
for num in {10..24}
|
|
|
|
do
|
|
|
|
{
|
|
|
|
size=$(brotli --lgwin="${num}" -c "${filename}" | wc -c)
|
|
|
|
echo "${num} ${size}" >> "${tmpfile}"
|
|
|
|
} &
|
|
|
|
done
|
|
|
|
|
|
|
|
# Wait for all background jobs to finish
|
|
|
|
wait
|
|
|
|
|
|
|
|
# Process results
|
|
|
|
{
|
|
|
|
read -r min_num min_size
|
|
|
|
while read -r num size; do
|
|
|
|
if (( size < min_size )); then
|
|
|
|
min_size=$size
|
|
|
|
min_num=$num
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
echo "Original size was ${original_size_kb}KB"
|
|
|
|
echo "Smallest compressed size was ${min_size} bytes for NUM=${min_num}"
|
|
|
|
} < "${tmpfile}"
|
|
|
|
|
|
|
|
# Clean up
|
|
|
|
rm "${tmpfile}"
|
|
|
|
|
|
|
|
# Use the smallest NUM value found in the test command
|
|
|
|
brotli --force --lgwin="${min_num}" "${filename}" -o "${filename}.br"
|
|
|
|
|
|
|
|
# find the difference in the file sizes
|
|
|
|
compressed_size_kb=$(du -k "${filename}.br" | cut -f1)
|
|
|
|
size_difference=$(bc <<< "${original_size_kb} - ${compressed_size_kb}")
|
|
|
|
echo "The compressed file is ${size_difference}KB smaller than the original file"
|