Update 2024-02-14 07:51 OpenBSD/amd64-x13
This commit is contained in:
81
.bin/OLD/autosort
Executable file
81
.bin/OLD/autosort
Executable file
@@ -0,0 +1,81 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script takes an input directory and processes all files.
|
||||
# It creates a directory structure in the output directory based
|
||||
# on metadata of the file. The filename will also be created out
|
||||
# of metadata, or replaced with the sha1 hash of itself in order
|
||||
# to avoid duplicates.
|
||||
|
||||
usage() {
|
||||
print "Usage: autosort <input directory> <output directory>";
|
||||
exit 2
|
||||
}
|
||||
|
||||
# check input
|
||||
test -d "$1" || usage
|
||||
test -d "$2" || usage
|
||||
|
||||
# normalize relative paths
|
||||
_indir="$(readlink -f "$1")"
|
||||
_outdir="$(readlink -f "$2")"
|
||||
|
||||
####################
|
||||
# MAIN PROGRAM #
|
||||
####################
|
||||
|
||||
start(){
|
||||
# trigger main loop
|
||||
find "$_indir" -type f | while read _file;
|
||||
do
|
||||
# extract mime type
|
||||
local _mime="$(file -bi "$_file")"
|
||||
local _category=${_mime%%/*}
|
||||
local _type=${_mime##*/}
|
||||
|
||||
case "$_category" in
|
||||
image) process_image "$_file" "$_type"; ;;
|
||||
*) printf 'Unhandled Category: %s in %s\n' "$_category" "$_file"; ;;
|
||||
esac
|
||||
|
||||
done
|
||||
}
|
||||
|
||||
#################
|
||||
# FUNCTIONS #
|
||||
#################
|
||||
|
||||
process_image() {
|
||||
# $1 = file
|
||||
# $2 = mime type
|
||||
case $2 in
|
||||
jpeg) handle_jpeg "$1"; ;;
|
||||
png) handle_jpeg "$1"; ;;
|
||||
gif) handle_copy "$1" "image" "$2"; ;;
|
||||
*) printf 'Unhandled Type: %s in %s\n' "$2" "$1"; ;;
|
||||
esac
|
||||
}
|
||||
|
||||
handle_jpeg() {
|
||||
# $1 = file
|
||||
local _exif="$(exifprint "$1")"
|
||||
local _make="$(printf '%s' "$_exif" | grep '0x010f' | awk '{for(i=5;i<=NF;++i)print $i}')"
|
||||
local _model="$(printf '%s' "$_exif" | grep '0x0110' | awk '{for(i=5;i<=NF;++i)print $i}')"
|
||||
local _datetime="$(printf '%s' "$_exif" | grep '0x9003' | awk '{for(i=5;i<=NF;++i)print $i}')"
|
||||
|
||||
test -z "$_make" && local _make=unknown
|
||||
test -z "$_model" && local _model=unknown
|
||||
test -z "$_datetime" && local _datetime="$(sha1 -q "$1")"
|
||||
|
||||
local _out="$(printf '%s %s/%s' "$_make" "$_model" "$_datetime" | tr '\n' ' ' | tr ':' '-')"
|
||||
|
||||
install -bDm 0666 "$1" "$_outdir/${_out}.jpg" && rm -f "$1"
|
||||
}
|
||||
|
||||
handle_copy() {
|
||||
# $1 = file
|
||||
# $2 = category
|
||||
# $3 = type
|
||||
install -bDm 0666 "$1" "$_outdir/$2/$3/${1##*/}" && rm -f "$1"
|
||||
}
|
||||
|
||||
start
|
||||
Reference in New Issue
Block a user