Renaming multiple files with sed

How can I rename files with names like Stargate SG-1 Season 01 Episode 01 to just "s01e01"? Of course, variable numbering. I already have something like this:

for file in *.mkv; do mv "$file" "$(echo "$file" | sed -e "REGEX HERE")

I just need a sed command that does what I need.

thanks

+4
source share
4 answers

There is no need for sed, try the following:

 #!/bin/bash for f in *.mkv; do set -- $f mv "$f" s${4}e${6} done 

In action:

 $ ls Stargate SG-1 Season 01 Episode 01.mkv $ ./l.sh $ ls s01e01.mkv 
+8
source

GNU sed

 for file in *.mkv; do mv "$file" "$(echo "$file" | sed -e 's/.*\(\S\+\)\s\+\S\+\s\(\S\+\)$/s\1e\2/') 
+3
source

Awk is also good for this

 for file in *.mkv; do mv "$file" $(awk '{print "s", $4, "e", $6}' <<<$file).mkv done 

I think this is not a problem for sed :)

+2
source

I would go this way to rename all * .mkv files:

ls *.mkv | awk '{print "mv \"" $0 "\" s" $4 "e" $6}' | sh

or

ls *.mkv | awk '{print "\"" $0 "\" s" $4 "e" $6}' | xargs mv

0
source

Source: https://habr.com/ru/post/1486509/


All Articles