Reputation: 1175
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".
Upvotes: 70
Views: 94666
Reputation: 146043
Piping the output of ls
is widely considered to be very dangerous because it's not predictable or portable, but if you are willing to take the risk:
#!/bin/bash
ls | while read name; do
echo mv $name ${name/$1//}
done
Upvotes: 3
Reputation: 957
Use rename, maybe you need to install it on linux, Its python script
rename (option) 's/oldname/newname' ...
so you can use it like
rename -v 's/000//' *.tga
that means we are instructing to replace all files with .tga extension in that folder to replace 000
with empty space. Hope that works
You can check this link for more info and here
Upvotes: 4
Reputation: 67829
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
Both arguments are wrapped in quotes to support spaces in the filenames.
Upvotes: 86
Reputation: 496902
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
Upvotes: 15
Reputation: 360055
Bash can do sed
-like substitutions:
for file in *; do mv "${file}" "${file/000/}"; done
Upvotes: 112