Shell Script – Create Sub-Directories and Organize Files by Date

datefilesrenamescriptingshell-script

I have some directories of files copied from my security camera that I would like to organize into sub-directories by file date. So for example;

-rwxrwxrwx 0 root root 4935241 Jul 19  2012 DSCN1406.JPG
-rwxrwxrwx 0 root root 4232069 Jul 19  2012 DSCN1407.JPG
-rwxrwxrwx 0 root root 5015956 Jul 20  2012 DSCN1408.JPG
-rwxrwxrwx 0 root root 5254877 Jul 21  2012 DSCN1409.JPG

I would like a script that runs to see the files in that directory, then create the 3 needed directories named like;

drwxrwxrwx 1 root root     0 Sep  2 16:49 07-19-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-20-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-21-2012

And then move the files into the appropriate directories. Does anyone have any suggestions on a good scriptable way to accomplish this?

Best Answer

On Linux and Cygwin, you can use date -r to read out the modification date of a file.

for x in *.JPG; do
  d=$(date -r "$x" +%Y-%m-%d)
  mkdir -p "$d"
  mv -- "$x" "$d/"
done

(I use the unambiguous, standard and easily-sorted YYYY-MM-DD format for dates.)

Related Question