Rename more than 1 file

Hi, I have multiple files in a directory e.g.

file1.txt.gz
file2.txt.gz
file3.txt.gz

and I want to rename them to:

file1.dat.gz
file2.dat.gz
file3.dat.gz

I don't have 'rename' command on my system.
Thanks!

If your shell can do variable substitution and there is no blanks in the filenames, you can try:

$ ls -1
file1.txt.gz
file2.txt.gz
file3.txt.gz
$ for a in file*.txt.gz; do A=${a/txt/dat}; mv $a $A; done
$ ls -1
file1.dat.gz
file2.dat.gz
file3.dat.gz

If it can't, try:

$ for a in file*.txt.gz; do mv $a $(echo $a| sed 's/txt/dat/'); done

Moving thread to the shell scripting area.

1 Like

Or:

$ ls
file1.txt.gz  file2.txt.gz  file3.txt.gz
$ find . -name 'file*.txt.gz' | sed 's/\(.*\)txt\(.*\)/mv -v & \1dat\2/e'
�./file1.txt.gz� -> �./file1.dat.gz�
�./file2.txt.gz� -> �./file2.dat.gz�
�./file3.txt.gz� -> �./file3.dat.gz�
$ ls
file1.dat.gz  file2.dat.gz  file3.dat.gz

Regards.

1 Like

Hi.

Alternatives with rename and mved:

#!/usr/bin/env bash

# @(#) s1	Demonstrate easy mass rename with similar pattern files.
# mved: see http://www.efball.com/linux/mved/mved (shell), or  http://raf.org/mved/ (perl)

# Utility functions: print-as-echo, print-line-with-visual-space, debug.
# export PATH="/usr/local/bin:/usr/bin:/bin"
pe() { for _i;do printf "%s" "$_i";done; printf "\n"; }
pl() { pe;pe "-----" ;pe "$*"; }
db() { ( printf " db, ";for _i;do printf "%s" "$_i";done;printf "\n" ) >&2 ; }
db() { : ; }
C=$HOME/bin/context && [ -f $C ] && $C rename mved

# Remove debris, create new files.
renew () {
  rm -f *.{txt,dat}.gz
  touch file{1,2,3}.txt.gz
}

pl " Current situation:"
renew
ls *.gz

pl " Results from rename:"
rename 's/txt/dat/' *.gz
ls *.gz

pl " Renewed current situation:"
renew
ls *.gz

pl " Results from mved script:"
mved =.txt.gz =.dat.gz
ls *.gz

exit 0

producing:

$ ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0.8 (lenny) 
bash GNU bash 3.2.39
rename - ( /usr/bin/rename, 2009-05-27 )
mved - ( local: RepRev 291, ~/p/stm/common/scripts/mved, 2013-06-21 )

-----
 Current situation:
file1.txt.gz  file2.txt.gz  file3.txt.gz

-----
 Results from rename:
file1.dat.gz  file2.dat.gz  file3.dat.gz

-----
 Renewed current situation:
file1.txt.gz  file2.txt.gz  file3.txt.gz

-----
 Results from mved script:
file1.dat.gz  file2.dat.gz  file3.dat.gz

See man rename and web page of mved for details.

Best wishes ... cheers, drl

Thanks guys!!!