Vous êtes sur la page 1sur 3

3 different ways of renaming a group of files

While dealing with multiple file operations, it is very common to have a scenario where we
would like to rename to set of files, say set of txt files to some other extension, or a set of non-
extension files to a new
extension, etc. In this article, we will see 3 different ways to rename the files.

1. To rename a set of stand alone files to a .txt extension. Assuming the directory contains the
files file1, file2 and file3.

Method 1:
This is a straight forward method in which we write a simple for loop and change the exentsion
through the mv command:

for i in *

do

mv $i $i.txt

done

The above snippet can either be run at the prompt or by putting it inside a file and running the
file.

Method 2:
In this, we will get the renaming done by editing a file in vi.
a) Re-direct the filenames to a file, say ls file* > a
b) Open the file a in vi.
c) In the escape mode, give the following command: :%s/.*/mv & &.txt/
d) Save and quit the file.
e) Run the file a: sh a

In the step c, what we do is , replace the line with "mv " and hence we form mv commands to
be executed. And we get it done by simply running the file a.

Method 3:
In this method, we use the find and sed command to get our renaming of the files done.
find . -name "file*" | sed 's/.*/mv & &.txt/' | sh

In this above, find finds the files and the sed command prepares the move instruction. If you
note carefully, the syntax is same as the one used inside vi. And the output of the sed is piped to
sh command.

2. Let us see an extension of the above. To rename a set of .txt files(file1.txt, file2.txt, file3.txt) to
.exe extension using the same above methods:

Method 1:
This method is same as the above method 1. Here we use the basename command to get the
filename alone without extension and then include a different extension during the mv command:

for i in *.txt

do

x=`basename $i .txt`

mv $i $x.exe

done

Method 2:
In this, we will get the renaming done by editing a file in vi.
a) Re-direct the filenames to a file, say ls file* > a
b) Open the file a in vi.
c) In the escape mode, give the following command: :%s/\.txt$/\.exe/
d) Save and quit the file.
e) Run the file a: sh a

The same explanation as given above.

Method 3:
In this method, we use the find and sed command to get our renaming of the files done.

find . -name "*.txt"|sed 's/\(.*\.\)\(.*\)/mv & \1exe/' | sh

In this above, find finds the files and the sed command prepares the move instruction. If you
note carefully, the syntax is same as the one used inside vi. And the output of the sed is piped to
sh command.
- See more at: http://www.theunixschool.com/2011/02/3-different-ways-of-renaming-group-
of.html#sthash.crfp7FvL.dpuf

Vous aimerez peut-être aussi