Browse Source

Put my photorec sorter script into git

master
Erik Popp 6 years ago
commit
691e559db4
1 changed files with 170 additions and 0 deletions
  1. +170
    -0
      sort-photorec

+ 170
- 0
sort-photorec View File

@@ -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"

Loading…
Cancel
Save