Rename all files in directory from $filename_h to $filename_half?

BashShell

Bash Problem Overview


Dead simple.

How do I rename

05_h.png
06_h.png

to

05_half.png
06_half.png

At least, I think it's simple, but it's hard to Google for this kind of thing unless you already know.

Thanks....

Bash Solutions


Solution 1 - Bash

Just use bash, no need to call external commands.

for file in *_h.png
do
  mv "$file" "${file/_h.png/_half.png}"
done

Do not add #!/bin/sh

For those that need that one-liner:

for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done

Solution 2 - Bash

Try rename command:

rename 's/_h.png/_half.png/' *.png

Update:

example usage:

create some content

$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls 
one_h.png  three_h.png  two_h.png

test solution:

$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png  three_half.png  two_half.png

Solution 3 - Bash

for f in *.png; do
  fnew=`echo $f | sed 's/_h.png/_half.png/'`
  mv $f $fnew
done

Solution 4 - Bash

Are you looking for a pure bash solution? There are many approaches, but here's one.

for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done

This presumes that the only files in the current directory that end in _h.png are the ones you want to rename.

Much more specifically

for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done

Presuming those two examples are your only. files.

For the general case, file renaming in has been covered before.

Solution 5 - Bash

Use the rename utility written in perl. Might be that it is not available by default though...

$ touch 0{5..6}_h.png

$ ls
05_h.png  06_h.png

$ rename 's/h/half/' *.png

$ ls
05_half.png  06_half.png

Solution 6 - Bash

for i in *_h.png ; do
  mv $i `echo "$i"|awk -F'.' '{print $1"alf."$2}'`
done

Solution 7 - Bash

I had a similar question: In the manual, it describes rename as

rename [option] expression replacement file

so you can use it in this way

rename _h _half *.png

In the code: '_h' is the expression that you are looking for. '_half' is the pattern that you want to replace with. '*.png' is the range of files that you are looking for your possible target files.

Hope this can help c:

Solution 8 - Bash

Another approach can be manually using batch rename option

Right click on the file -> File Custom Commands -> Batch Rename and you can replace h. with half.

This will work for linux based gui using WinSCP etc

Solution 9 - Bash

One liner:
for file in *.php ; do mv "$file" "_$file" ; done

Solution 10 - Bash

Use the rename utility:

rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' * 
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png

   

Solution 11 - Bash

Although the answer set is complete, I need to add another missing one.

for i in *_h.png;
  do name=`echo "$i" | cut -d'_' -f1`
  echo "Executing of name $name" 
  mv "$i" "${name}_half.png"
done

Solution 12 - Bash

I had to rename the prefix of files and I found this answer with a solution like this:

for i in h_*; do mv ${i/#h_/half_}; done

> If pattern begins with #, it must match at the beginning of the > expanded value of parameter. If pattern begins with %, it must match > at the end of the expanded value of parameter.

from man bash

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionRichardView Question on Stackoverflow
Solution 1 - Bashbash-o-logistView Answer on Stackoverflow
Solution 2 - BashMichał ŠrajerView Answer on Stackoverflow
Solution 3 - BashKaroly HorvathView Answer on Stackoverflow
Solution 4 - BashsorpigalView Answer on Stackoverflow
Solution 5 - BashFredrik PihlView Answer on Stackoverflow
Solution 6 - Bashztank1013View Answer on Stackoverflow
Solution 7 - BashJames YenView Answer on Stackoverflow
Solution 8 - BashEaswarView Answer on Stackoverflow
Solution 9 - BashJadeyeView Answer on Stackoverflow
Solution 10 - BashC. RamseyerView Answer on Stackoverflow
Solution 11 - BashTharindu SathischandraView Answer on Stackoverflow
Solution 12 - BashLucasView Answer on Stackoverflow