Hey guys, I am the definition of a newbie. I am in the process of trying to rip all my dvds onto a new HTPC I setup. While doing this, I am also trying to organize a bunch of other files I already have to proper naming conventions. So far I have just been naming each file separately (I am on a Windows 7 machine). Somebody told me you can rename multiple files easily using cygwin (which I have installed) and shell scripting. However, I have NO CLUE how to do this. The files are named as so:
[WBDS]Show_Title_-_001_-_Episode_Name_[DR][x264][F26CC67E]
[AJGD]Show_Title_-_002_-_Episode_Name_[DR][x264][CBD6A73C]
and so on...
My goal is to end up with:
s01e01 - Episode Name
s01e02 - Episode Name
etc...
From lots of googling I know I need to follow:
rename oldname newname *.files
However, I have no clue how to set this up properly. Thanks for any help!
One point - consider NOT having spaces in file names. When using cmd.exe or cygwin they can cause problems later on.
This is how it works for what you describe. I put a # in front of the command that renames files. That line is red. Leave it there until you have run through the script, seen the proposed outcomes. Then remove it. In shell # marks the start of a comment - the shell interpreter ignores the stuff after it.
c:/Users/Ralze34/media/mydirectory is a name I made up. Use the correct one. cygwin uses / instead of \ in file names.
this will not work if your files have spaces in the file names
cd c:/Users/Ralze34/media/mydirectory # go to where the files are
count=1 # start counting at 1
for filename in * # check every file in the directory
do
if [ -f $filename ] ; then # if it a regular file - not a directory
episode=$(echo "$filename" | awk -F '_' '{print $6,"_",$7}' )
newfilename=$(printf "s01e01_%s" "$episode") # build new file name
echo "rename $filename to $newfilename" # show what we did
# mv $filename $newfilename
fi
done
Wow, ok none of that makes sense to me (technically speaking). Thanks for the help though. So I copied what you have and see this printed out:
rename [WBDS]Show_Title_-_039_-_Episode_Name_[DR][x264][D9373446].mkv to s01e01_[WBDS]Show_Title_-_039_-_Episode_Name_[DR][x264][D9373446].mkv awk -F _ {print $6,"_",$7}
So now I am guessing I need to tweak to handle the correct replacements (again something I am clueless on). It seems I need to replace the s01e01 to like s01e + $count since we set count to 1 at start. Then something to strip out everything except the episode name.
Oh, [expletive deleted]. I did not test my code. My bad.
See my original post. Find the line with awk in it. See the red pipe: |
Add that and your code should be okay.
Caveat. Again - you seem to have a windows-centric file naming world view. Which is fine on Windows. For cygwin: Spaces in file names require other approaches than the one I posted.
I've only ever worked on Windows machines. I'm definitely willing to expand my horizons though! Looks like that made a big difference (would you mind explaining what each thing is doing a bit more in detail, just trying to learn). Here is the output now:
rename [WBDS]Show_Title_-_038_-_Episode_Name_[DR][x264][055F2967].mkv to s01e01_Episode_ Name