tr from the command line

der.hans plug-discuss@lists.plug.phoenix.az.us
Tue, 14 May 2002 18:39:25 -0700 (MST)


Am 14. May, 2002 schwätzte Carl Parrish so:

> I've got a lot of files called *_log. I want to change them all to
> *.log. I *think* I want to use the tr command. Can anyone give me the
> syntax? my undertanding from the info and man files isn't working.

The problem with tr is that it will change every occurance, e.g.

$ echo fred_vuz_hier_log | tr _ .
fred.vuz.hier.log

What you need is something that either turns _log into .log or at least
recognizes that the _ is right before log, which is the end of the string.

$ for i in 1 2 3 4 5 6; do touch /tmp/fred/${i}_log; done
$ ls /tmp/fred
1_log  2_log  3_log  4_log  5_log  6_log
$ for i in /tmp/fred/*_log; do mv $i ${i%_log}.log; done
$ ls /tmp/fred
1.log  2.log  3.log  4.log  5.log  6.log

'%' tells bash to knock that string off the end if it exists.

Use '#' to whack something off the beginning.

$ for i in /tmp/fred/6*; do dir=`dirname $i`; log=`basename $i`; mv $i
$dir/six${log#6}; done
$ ls /tmp/fred
1.log  2.log  3.log  4.log  5.log  six.log

ciao,

der.hans
-- 
#  https://www.LuftHans.com/
#  Motorraeder toeten nicht. Motorraeder werden getoetet.