From 691e559db4479ffba80ca5ff266ca30df9f16565 Mon Sep 17 00:00:00 2001 From: Erik Popp Date: Tue, 11 Jul 2017 12:07:13 -0500 Subject: [PATCH] Put my photorec sorter script into git --- sort-photorec | 170 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 sort-photorec diff --git a/sort-photorec b/sort-photorec new file mode 100644 index 0000000..bbcd533 --- /dev/null +++ b/sort-photorec @@ -0,0 +1,170 @@ +#!/bin/bash + +usage="+-------------------------------------------------------------------------------------+ +| sort-photorec | +| sorts the files recovered by photorec into folders by file extension | +| usage: | +| sort-photorec [-v|--verbose] [-q|--quiet] folder_which_contains_recup_dir.*_folders | ++-------------------------------------------------------------------------------------+" + +#author info +author_name="Erik Popp" +author_website="erikpopp.com" + +#settings +fifo_filename="/var/run/sort-photorec/$$" +fifo_folder="/var/run/sort-photorec" +files_without_extensions="No File Extension" +sorted_files="Sorted Files" +verbosity=1 + + +#logger +function logger +{ + if test -n "$1" + then + if test "$1" -le "$verbosity" + then + if test -n "$2" + then + echo "sort-photorec: $2" 1>&2 + else + echo "sort-photorec: logger: you forgot to specify a log message" + fi + fi + else + echo "sort-photorec: logger: you forgot to specify a log level" + fi +} + +#make fifo and open it in file descriptor 3 so I can pipe filenames that I'm filtering while still giving feedback through stdout as expected +#mkdir "$fifo_folder" +#mkfifo -m 'u=rw,go=' "$fifo_filename" + + +#process arguments +for argument in $@ +do + case "$argument" in + -v|--verbose) let verbosity++ + logger 0 "increasing verbosity to $verbosity" + ;; + -q|--quiet) let verbosity-- + logger 0 "decreasing verbosity to $verbosity" + ;; + *) if test -d "$argument" + then + if test -z "$recovered_folder" + then + logger 1 "sorting recovered files in \"$1\"" + recovered_folder="$argument" + else + logger 0 "folder with recovered files already specified (\"$recovered_folder\"), refusing to set a second folder to check" + echo "$usage" + logger 0 "quitting..." + exit + fi + else + logger 0 "\"$argument\" is not a folder, quitting" + echo "$usage" + exit + fi + esac +done + +if test -z "$recovered_folder" +then + logger 0 "you forgot to specify the folder that the recovered files are in, quitting" + echo "$usage" + exit +fi + + +#process files +logger 1 "moving to folder with recovered files \"$recovered_folder\"" +pushd "$recovered_folder" 1>&2 + +if test -d "$sorted_files" +then + logger 0 "folder for sorted files already exists, using it..." + logger 1 "am I continuing from a previous run?" +elif test ! -e "$sorted_files" +then + logger 1 "folder for sorted files (\"$sorted_files\") does not exist, creating it..." + mkdir "$sorted_files" +else + logger 0 "something already exists with the name that I use for the folder that I use for sorted files (\"$sorted_files\"), but it's not a directory, quitting..." + stat "$sorted_files" + exit +fi + +logger 1 "combing through all contents of folder \"$recovered_folder\"..." +find . | grep -E '^\./recup_dir\.[0-9]+/' | +while read filename +do + logger 2 "current item: \"$filename\"" + if test -f "$filename" + then + logger 2 "current item is a file, processing further..." + echo "$filename" + elif test -d "$filename" + then + logger 2 "current item is a folder, not a file. I'll search its contents, but I won't sort the folder by file type." + logger 1 "found a folder with recovered files in it: \"$filename\"" + fi +done | +while read known_to_be_a_file +do + base_filename="$(basename "$known_to_be_a_file")" + final_folder="" + logger 2 "basename of file is \"$base_filename\"" + +#file extension sorting magic done here + if [[ "$base_filename" = *.* ]] + then + filename_without_extension="${base_filename%.*}" + file_extension="${base_filename##*.}" + else + filename_without_extension="$base_filename" + file_extension="" + fi + + logger 2 "filename without extension: \"$filename_without_extension\"" + logger 2 "file extension: \"$file_extension\"" + + if test -n "$file_extension" + then + logger 2 "file \"$base_filename\" has an extension" + + if ! test -d "$sorted_files/$file_extension" + then + logger 2 "\"$known_to_be_a_file\" is the first file I've found with extension \"$file_extension\", creating a folder for it" + mkdir "$sorted_files/$file_extension" + fi + + final_folder="./$sorted_files/$file_extension" + logger 2 "moving \"$known_to_be_a_file\" to \"$final_folder\"" + mv "$known_to_be_a_file" "$final_folder" + else + final_folder="./$sorted_files/$files_without_extensions" + + if ! test -d "$final_folder" + then + logger 2 "folder \"$files_without_extensions\" doesn't currently exist, creating it" + mkdir -p "$final_folder" + fi + + logger 2 "file \"$known_to_be_a_file\" does not have a file extension, moving to folder \"$final_folder\"" + mv "$known_to_be_a_file" "$final_folder" + fi + +done + +logger 1 "returning to previous working directory" +popd 1>&2 + + +#delete fifo +#rm "$fifo_filename" +#rmdir "$fifo_folder"