ls | perl -nl -e '/(.*)(S[0-9]+E[0-9]+).*(\.mp4)/ && print "mv \"" . $_ . "\" \"". $1 . $2 . $3 . "\""'
How does this work? First ls
outputs the list of files, one per line, like so:
The.Big.Bang.Theory.S01E01.xxxxxxxx.mp4
The.Big.Bang.Theory.S01E02.somecrap.mp4
The.Big.Bang.Theory.S04E12.otherjunk.mp4
Then perl -nl
splits this into lines, feeding each to the regex, much like awk*. The regex captures 3 groups (denoted by parentheses), first the bit before SxxEyy, then that, then the file suffix. It then simply assembles a mv
command suitable for renaming the files, like so:
mv "The.Big.Bang.Theory.S01E01.xxxxxxxx.mp4" "The.Big.Bang.Theory.S01E01.mp4"
mv "The.Big.Bang.Theory.S01E02.somecrap.mp4" "The.Big.Bang.Theory.S01E02.mp4"
mv "The.Big.Bang.Theory.S04E12.otherjunk.mp4" "The.Big.Bang.Theory.S04E12.mp4"
This can then be inspected and once you're satisfied it does what you want, piped into a shell by appending: | sh
.
*awk would normally be a good tool to use for this, but sadly only GNU awk supports regex capture groups and Mac OS X doesn't include gawk by default.
You should be able to turn your script into an application with Automator - Applications -> Utilities -> Automator.app
. Look for an option called "Run Shell Script" and once you're done, it should behave like other apps in that anything that is dragged and dropped on it will be run with it. Good luck!
Best Answer
I would change two things to make it work
{}
to separate it from the other text (how should bash know that the variable isn't calledilatest
otherwise?sleep
expects the sleep time in secondsThis gives you
In addition, having the
sleep
as part of the loop code will require that you press ^C twice to terminate the loop. You might want to try the following instead