I have a lot of files that have a shared pattern in their name that I would like to remove. For example I have the files, "a_file000.tga" and "another_file000.tga". I would like to do an operation on those files that would remove the pattern "000" from their names resulting in the new names, "a_file.tga" and "another_file.tga".
+3
A:
Bash can do sed
-like substitutions:
for file in *; do mv "${file}" "${file/000/}"; done
Dennis Williamson
2009-09-30 19:36:06
+3
A:
Try this (this works in plain old Bourne sh
as well):
for i in *000.tga
do
mv $i `echo $i | sed 's/000//'`
done
mouviciel
2009-09-30 19:36:31
+1 for most portable solution (and because I'm running too low on upvotes to keep upvoting _all_ the good answers).
Chris Lutz
2009-09-30 19:38:02
+2
A:
A non-bash solution, since I know two speedy posters have already covered that:
There's an excellent short perl program called rename
which is installed by default on some systems (others have a less useful rename program). It lets you use perl regex for your renaming, e.g:
rename 's/000//' *000*.tga
Jefromi
2009-09-30 19:36:36
+3
A:
#!/bin/bash
ls | while read name; do
echo mv $name ${name/$1//}
done
DigitalRoss
2009-09-30 19:38:38