mirror of
https://codeberg.org/h3xx/optipdf
synced 2024-08-15 00:03:23 +00:00
106 lines
2.2 KiB
Text
106 lines
2.2 KiB
Text
|
#!/bin/bash
|
||
|
# vi: et sts=4 sw=4 ts=4
|
||
|
|
||
|
PRESERVE_TIMESTAMP=0
|
||
|
|
||
|
TEMP_FILES=()
|
||
|
cleanup() {
|
||
|
rm -f -- "${TEMP_FILES[@]}"
|
||
|
}
|
||
|
trap 'cleanup' EXIT
|
||
|
|
||
|
file_size() {
|
||
|
stat \
|
||
|
--format='%s' \
|
||
|
--dereference \
|
||
|
-- \
|
||
|
"$@" \
|
||
|
2>/dev/null
|
||
|
}
|
||
|
|
||
|
# copies $2 over to $1 if $2 is smaller than $1
|
||
|
use_smaller() {
|
||
|
# if `$TEMP' isn't empty and it's of a smaller size than `$FILE',
|
||
|
# preserve every attribute and replace `$FILE' with `$TEMP'
|
||
|
local \
|
||
|
FILE=$1 \
|
||
|
TEMP=$2 \
|
||
|
ORIGSIZE \
|
||
|
TEMPSIZE
|
||
|
|
||
|
ORIGSIZE=$(file_size "$FILE")
|
||
|
TEMPSIZE=$(file_size "$TEMP")
|
||
|
|
||
|
if [[ -f $TEMP &&
|
||
|
$TEMPSIZE -gt 0 &&
|
||
|
$TEMPSIZE -lt $ORIGSIZE
|
||
|
]]; then
|
||
|
|
||
|
# Preserve attributes by copying them from the original file to the
|
||
|
# temporary one
|
||
|
chmod \
|
||
|
--reference="$FILE" \
|
||
|
-- \
|
||
|
"$TEMP" &&
|
||
|
|
||
|
if [[ $PRESERVE_TIMESTAMP -ne 0 ]]; then
|
||
|
touch \
|
||
|
--reference="$FILE" \
|
||
|
-- \
|
||
|
"$TEMP"
|
||
|
fi &&
|
||
|
|
||
|
if [[ $UID -eq 0 ]]; then
|
||
|
# We are root, so we can chown(1) things
|
||
|
chown \
|
||
|
--reference="$FILE" \
|
||
|
-- \
|
||
|
"$TEMP"
|
||
|
fi &&
|
||
|
|
||
|
cp \
|
||
|
--preserve=mode,ownership,timestamps \
|
||
|
-- \
|
||
|
"$TEMP" \
|
||
|
"$FILE"
|
||
|
|
||
|
local ERR=$?
|
||
|
case "$ERR" in
|
||
|
'0')
|
||
|
printf 'Optimized "%s"\n' \
|
||
|
"$FILE" \
|
||
|
>&2
|
||
|
;;
|
||
|
*)
|
||
|
printf 'Failed to optimize "%s"!\n' \
|
||
|
"$FILE" \
|
||
|
>&2
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
fi
|
||
|
|
||
|
# Protect against unsuccessful following file writes to our TEMP file
|
||
|
rm -f -- "$TEMP"
|
||
|
|
||
|
}
|
||
|
|
||
|
TEMP0=$(mktemp -t "${0##*/}.XXXXXX")
|
||
|
TEMP1=$(mktemp -t "${0##*/}.XXXXXX")
|
||
|
TEMP_FILES+=("$TEMP0" "$TEMP0")
|
||
|
|
||
|
ERRORS=0
|
||
|
for FILE; do
|
||
|
rm -f -- "$TEMP0" "$TEMP1"
|
||
|
if !
|
||
|
qpdf --stream-data=uncompress -- "$FILE" "$TEMP0" &&
|
||
|
qpdf --stream-data=compress -- "$TEMP0" "$TEMP1" &&
|
||
|
use_smaller "$FILE" "$TEMP1"; then
|
||
|
(( ++ERRORS ))
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [[ $ERRORS -gt 0 ]]; then
|
||
|
exit 1
|
||
|
fi
|