|
#!/bin/bash |
|
# |
|
# Parts of this program: |
|
# |
|
# - deduplicate-photos-sha1.sh |
|
# - deduplicate-photos-copy.sh |
|
# - deduplicate-photos-exif.sh |
|
# |
|
# Install the EXIF tool: |
|
# |
|
# sudo apt install exif |
|
# |
|
# @author: Fabio Lima |
|
# |
|
|
|
SRCDIR="${1}" |
|
DSTDIR="${2}" |
|
|
|
EXT="jpg" |
|
DATE=$(date +%Y%m%d_%H%M%S) |
|
OUTLOG="${DSTDIR}"/deduplicate-photos-${DATE}-output.log |
|
ERRLOG="${DSTDIR}"/deduplicate-photos-${DATE}-errors.log |
|
|
|
START=$(date +%Y-%m-%d_%H:%M:%S) |
|
|
|
SHA1DIR="${DSTDIR}/deduplicate-photos-${DATE}-sha1"; |
|
test ! -d "${SHA1DIR}" && mkdir "${SHA1DIR}" |
|
|
|
COPYDIR="${DSTDIR}/deduplicate-photos-${DATE}-copy"; |
|
test ! -d "${COPYDIR}" && /bin/mkdir "${COPYDIR}" |
|
|
|
EXIFDIR="${DSTDIR}/deduplicate-photos-${DATE}-exif"; |
|
test ! -d "${EXIFDIR}" && /bin/mkdir "${EXIFDIR}" |
|
|
|
echo "START: $START" |
|
echo "START: $START" >> "${OUTLOG}" |
|
|
|
echo >> "${OUTLOG}" |
|
|
|
echo "Generating lists of duplicates" |
|
echo "Generating lists of duplicates" >> "${OUTLOG}" |
|
echo "find \"${SRCDIR}\" -type f -iname \"*.${EXT}\" -exec ./deduplicate-photos-sha1.sh {} \"${SHA1DIR}\"" \; >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
find "${SRCDIR}" -type f -iname "*.${EXT}" -exec ./deduplicate-photos-sha1.sh {} "${SHA1DIR}" \; >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo >> "${OUTLOG}" |
|
|
|
echo "Copying the first photo of each list of duplicates" |
|
echo "Copying the first photo of each list of duplicates" >> "${OUTLOG}" |
|
echo "find \"${SHA1DIR}\" -type f -name \"*.duplicates.sorted\" -exec ./deduplicate-photos-copy.sh {} \"${COPYDIR}\"" \; >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
find "${SHA1DIR}" -type f -name "*.duplicates.sorted" -exec ./deduplicate-photos-copy.sh {} "${COPYDIR}" \; >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo >> "${OUTLOG}" |
|
|
|
echo "Copying the first photo of each list of duplicates to direcories with date" |
|
echo "Copying the first photo of each list of duplicates to direcories with date" >> "${OUTLOG}" |
|
echo "find \"${SHA1DIR}\" -type f -name \"*.duplicates.sorted\" -exec ./deduplicate-photos-exif.sh {} \"${EXIFDIR}\" \"${EXT}\"" \; >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
find "${SHA1DIR}" -type f -name "*.duplicates.sorted" -exec ./deduplicate-photos-exif.sh {} "${EXIFDIR}" "${EXT}" \; >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
END=$(date +%Y-%m-%d_%H:%M:%S) |
|
|
|
echo >> "${OUTLOG}"; |
|
echo "SUMMARY" >> "${OUTLOG}"; |
|
|
|
echo "Started: $START" >> "${OUTLOG}"; |
|
echo "Finished: $END" >> "${OUTLOG}"; |
|
|
|
echo -n "Photos found: " >> "${OUTLOG}" |
|
find "${SRCDIR}" -type f -iname "*.${EXT}" | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Photos in lists of duplicates: " >> "${OUTLOG}" |
|
find "${SHA1DIR}" -name "*.duplicates" -exec cat {} \; | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Photos in sorted lists of duplicates: " >> "${OUTLOG}" |
|
find "${SHA1DIR}" -name "*.duplicates.sorted" -exec cat {} \; | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Lists of duplicates generated: " >> "${OUTLOG}" |
|
find "${SHA1DIR}" -name "*.duplicates" | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Sorted lists of duplicates generated: " >> "${OUTLOG}" |
|
find "${SHA1DIR}" -name "*.duplicates.sorted" | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Photos copied WITHOUT DATE: " >> "${OUTLOG}" |
|
find "${COPYDIR}" -type f -iname "*.${EXT}" | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Photos copied WITH DATE: " >> "${OUTLOG}" |
|
find "${EXIFDIR}" -type f -iname "*.${EXT}" | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Data in source directory: " >> "${OUTLOG}" |
|
du -sh "${SRCDIR}" | cut -f1 >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Data in source directory in kilobytes: " >> "${OUTLOG}" |
|
du -s "${SRCDIR}" | cut -f1 >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Data copied to directories WITHOUT DATE: " >> "${OUTLOG}" |
|
du -sh "${COPYDIR}" | cut -f1 >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Data copied to directories WITHOUT DATE in kilobytes: " >> "${OUTLOG}" |
|
du -s "${COPYDIR}" | cut -f1 >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Data copied to directories WITH DATE: " >> "${OUTLOG}" |
|
du -sh "${EXIFDIR}" | cut -f1 >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Data copied to directories WITH DATE in kilobytes: " >> "${OUTLOG}" |
|
du -s "${EXIFDIR}" | cut -f1 >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
echo -n "Lines in error output file: " >> "${OUTLOG}" |
|
cat "${ERRLOG}" | wc -l >> "${OUTLOG}" 2>> "${ERRLOG}" |
|
|
|
# Show output SUMARY |
|
tail -n 18 "${OUTLOG}" |
|
|