|
- #!/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"
|