diff --git a/images_resize.sh b/images_resize.sh index e3991f7..48a60c1 100755 --- a/images_resize.sh +++ b/images_resize.sh @@ -7,8 +7,8 @@ echo "Resizing large JPGs in $(pwd)" -for f in $(find . -regextype posix-egrep -regex ".*\.(jpg|JPG|JPEG|jpeg)$") -#echo "Resizing $(f)" +find . -regextype posix-egrep -regex ".*\.(jpg|JPG|JPEG|jpeg)$" -print0 | while IFS= read -r -d '' f +#echo "Resizing $(f)" #do mogrify -resize 2800000@@\> -sampling-factor 4:2:0 -strip -quality 85% -colorspace RGB $f do ~/Applications/magick "$f" -resize 8000000@@\> -sampling-factor 4:2:0 -strip -quality 85% "$f" done diff --git a/images_resize_recursive.sh b/images_resize_recursive.sh index 9519874..8240490 100755 --- a/images_resize_recursive.sh +++ b/images_resize_recursive.sh @@ -1,6 +1,6 @@ #!/bin/bash -for f in ./** +find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' f do pushd "$f" ~/images_resize.sh diff --git a/rar2zip.sh b/rar2zip.sh index c33f436..bc866a8 100755 --- a/rar2zip.sh +++ b/rar2zip.sh @@ -10,30 +10,52 @@ echo "Converting RARs to ZIPs" # Use RAM disk for temporary files. WORKDIR="/dev/shm/" +# Cleanup function +cleanup_temp() { + if [ -n "$TEMPDIR" ] && [ -d "$TEMPDIR" ]; then + rm -r "$TEMPDIR" + fi +} + for INFILE in "$@"; do # Absolute path to old file - OLDFILE=`realpath "${INFILE}"` + OLDFILE=$(realpath "${INFILE}") # Get the file name without the extension - BASENAME=`basename "${OLDFILE%.*}"` + BASENAME=$(basename "${OLDFILE%.*}") # Path for the file. The ".zip" file will be written there. - DIRNAME=`dirname "$OLDFILE"` + DIRNAME=$(dirname "$OLDFILE") # Name of the .zip file NEWNAME="${DIRNAME}/$BASENAME.zip" if [ ! -e "${NEWNAME}" ]; then # Set name for the temp dir. This directory will be created under WORKDIR - TEMPDIR=`mktemp -p "$WORKDIR" -d` + TEMPDIR=$(mktemp -p "$WORKDIR" -d) + + # Set up cleanup trap + trap cleanup_temp EXIT INT TERM # Create a temporary folder for unRARed files echo "Extracting $OLDFILE" - - rar x "$OLDFILE" "${TEMPDIR}/" + + if ! rar x "$OLDFILE" "${TEMPDIR}/"; then + echo "Error: Failed to extract $OLDFILE" + cleanup_temp + continue + fi # Zip the files with maximum compression - 7z a -tzip -mx=9 "$NEWNAME" "${TEMPDIR}/*" + pushd "$TEMPDIR" > /dev/null + if ! 7z a -tzip -mx=9 "$NEWNAME" ./*; then + echo "Error: Failed to create ZIP for $BASENAME" + popd > /dev/null + cleanup_temp + continue + fi + popd > /dev/null + # Alternative. MUCH SLOWER, but better compression # 7z a -mm=Deflate -mfb=258 -mpass=15 -r "$NEWNAME" * @@ -41,7 +63,8 @@ for INFILE in "$@"; do touch -r "$OLDFILE" "$NEWNAME" # Delete the temporary directory - rm -r "$TEMPDIR" + cleanup_temp + trap - EXIT INT TERM # OPTIONAL. Safe-remove the old file #gio trash "$OLDFILE" diff --git a/rar2zip_images.sh b/rar2zip_images.sh index f70e3d5..1bb755a 100755 --- a/rar2zip_images.sh +++ b/rar2zip_images.sh @@ -1 +1,2 @@ +#!/bin/bash find /media/rewt/media/images/ -name '*.rar' -exec ~/rar2zip.sh '{}' \; diff --git a/rar2zip_incomplete.sh b/rar2zip_incomplete.sh index dd901d3..115b951 100755 --- a/rar2zip_incomplete.sh +++ b/rar2zip_incomplete.sh @@ -1 +1,2 @@ +#!/bin/bash find /media/rewt/media/incomplete/ -name '*.rar' -exec ~/rar2zip.sh '{}' \; diff --git a/zip_images_recursive.sh b/zip_images_recursive.sh index 072dd67..dd8bd1c 100755 --- a/zip_images_recursive.sh +++ b/zip_images_recursive.sh @@ -28,10 +28,8 @@ if [ -n "$jpgs" ]; then fi -for subd in *; do - if [ -d "${subd}" ]; then - pushd "${subd}" - ~/zip_images_recursive.sh "${directoryTree}" - popd - fi +find . -mindepth 1 -maxdepth 1 -type d -print0 | while IFS= read -r -d '' subd; do + pushd "${subd}" + ~/zip_images_recursive.sh "${directoryTree}" + popd done diff --git a/zip_images_resize.sh b/zip_images_resize.sh index e7ed865..57ca00a 100755 --- a/zip_images_resize.sh +++ b/zip_images_resize.sh @@ -10,38 +10,59 @@ echo "Resizing large JPGs in ZIPs" # Use RAM disk for temporary files. WORKDIR="/dev/shm/" +# Cleanup function +cleanup_temp() { + if [ -n "$TEMPDIR" ] && [ -d "$TEMPDIR" ]; then + rm -r "$TEMPDIR" + fi +} + for INFILE in "$@"; do # Absolute path to old file - #OLDFILE=`realpath "${INFILE}"` + #OLDFILE=$(realpath "${INFILE}") OUTFILE="${INFILE%.zip}-compress.zip" - if [ ! -e "${OUTFILE}" ]; then + # Remove output file if it already exists + if [ -e "${OUTFILE}" ]; then rm "${OUTFILE}" fi - # Set name for the temp dir. This directory will be created under WORKDIR - TEMPDIR=`mktemp -p "$WORKDIR" -d` - # Create a temporary folder for unRARed files + # Set name for the temp dir. This directory will be created under WORKDIR + TEMPDIR=$(mktemp -p "$WORKDIR" -d) + + # Set up cleanup trap + trap cleanup_temp EXIT INT TERM + + # Create a temporary folder for unzipped files echo "Extracting $INFILE" - + # extract files from zip - unzip "$INFILE" -d "$TEMPDIR" # -j to junk directories + if ! unzip "$INFILE" -d "$TEMPDIR"; then + echo "Error: Failed to extract $INFILE" + cleanup_temp + continue + fi # resize #convert '${TEMPDIR}/*.jpg' -set filename:fn '%[basename]' -resize 2800000@@\> -sampling-factor 4:2:0 -strip -quality 85% -colorspace RGB '%[filename:fn].jpg' - pushd "$TEMPDIR" + if ! pushd "$TEMPDIR" > /dev/null; then + echo "Error: Failed to change to temp directory" + cleanup_temp + continue + fi ~/images_resize.sh - popd + popd > /dev/null # Zip the files with no compression - 7z a -tzip -mx=0 "$OUTFILE" "${TEMPDIR}/*" - - if [ $? -ne 0 ]; then - echo Exiting - exit 1 + pushd "$TEMPDIR" > /dev/null + if ! 7z a -tzip -mx=0 "$OUTFILE" ./*; then + echo "Error: Failed to create ZIP" + popd > /dev/null + cleanup_temp + continue fi - + popd > /dev/null # Alternative. MUCH SLOWER, but better compression # 7z a -mm=Deflate -mfb=258 -mpass=15 -r "$NEWNAME" * @@ -52,7 +73,8 @@ for INFILE in "$@"; do mv "$OUTFILE" "$INFILE" # Delete the temporary directory - rm -r "$TEMPDIR" + cleanup_temp + trap - EXIT INT TERM # OPTIONAL. Safe-remove the old file #gio trash "$OLDFILE" diff --git a/zip_images_resize_recursive.sh b/zip_images_resize_recursive.sh index f2cc0ca..2299247 100755 --- a/zip_images_resize_recursive.sh +++ b/zip_images_resize_recursive.sh @@ -1,5 +1,3 @@ #!/bin/bash -IFS=$'\n'; set -f -find . -iname *.zip -exec ~/zip_images_resize.sh '{}' \; -unset IFS; set +f +find . -iname '*.zip' -exec ~/zip_images_resize.sh '{}' \;