rename v. script

Deron Meranda deron.meranda at gmail.com
Thu May 19 05:19:52 UTC 2005


On 5/19/05, THUFIR HAWAT <hawat.thufir at gmail.com> wrote:
> given:
> 
> bash-3.00$ ls -al
> total 984
> drwxr-xr-x   2 thufir thufir  4096 May 16 02:18 .
> drwx------  15 thufir thufir  4096 May 16 02:18 ..
> -rw-r--r--   1 thufir thufir 12354 May 14 22:30 1151154
> -rw-r--r--   1 thufir thufir 12955 May 14 22:16 1199229
> -rw-r--r--   1 thufir thufir 13639 May 14 22:22 1238181
> -rw-r--r--   1 thufir thufir 13996 May 14 22:24 1268816
> -rw-r--r--   1 thufir thufir 12176 May 14 22:37 1276032
> ...
> 
> and then:
> 
> bash-3.00$ mv 1151154 1151154.html
> bash-3.00$ mv 1199229 1199229.html
> bash-3.00$ mv 1238181 1238181.html
> 
> each file can be changed.  however, there are many files and that is
> very tedious.  can the above three commands (or 50, or 100) be written
> with a single rename command?

Not with just one mv command, but almost as simple,

  for f in *[0-9] ; do mv $f $f.html ; done

If you have hundreds of files, or if there are any unusual filenames
(such as containing spaces or nonprintable characters), a more
robust but longer command is (on two lines here for readability),

  find . -type f -name '*[0-9]' -print0 | \
    xargs -0 --replace mv -- {} {}.html

The "0" in -print0 and -0 is a digit-zero, not a letter Oh.

Note, the *[0-9] pattern is there to match only those filenames that
end in a digit (as in your example), so it doesn't match any other
files.
-- 
Deron Meranda




More information about the users mailing list