I have thousands of files without extensions after recovery (mostly pictures). I need to sort them into separate folders by filetype (folders must be created during sort process). I can determine filetype in linux using “file” command. Does somebody have bash script for it?
For example: Initial dir contains files: 001, 002, 003, 004. After sorting should be 3 dirs: ‘jpeg’ contain 001.jpg, 003.jpg; ‘tiff’ contain 002.tiff and ‘others’ contain 004.
Advertisement
Answer
This answer does not execute file
command multiple times for each file, which is unnecessary
file -N --mime-type -F"-&-" * | awk -F"-&-" 'BEGIN{q="47"} { o=$1 gsub("/","_",$2);sub("^ +","",$2) if (!($2 in dir )) { dir[$2] cmd="mkdir -p "$2 print cmd #system(cmd) #uncomment to use } files[o]=$2 } END{ for(f in files){ cmd="cp "q f q" "q files[f]"/"f".jpg" q print cmd #system(cmd) #uncomment to use } }'
similarly, can be done with bash4+ script using associative arrays.