renamer script help..

James Michael Fultz croooow at gmail.com
Mon Feb 22 03:29:05 UTC 2010


* Johnny Rosenberg <gurus.knugum at gmail.com> [2010-02-21 16:47 +0100]:
> 2010/2/21 Vadkan Jozsef <jozsi.avadkan at gmail.com>:
> > The script:
> > http://pastebin.ca/1804613
> >
> > but it's not working too well:
> > http://pastebin.ca/1804612
> >
> > e.g.: the script makes "arviztur-ukorfurogep" from "árvíztűrő
> > tükörfúrógép", when it should be: "arvizturo-tukorfurogep"
> >
> > Has someone a similar script, that works?
[...]
> So here's the whole script now:
> #!/bin/bash
> 
> ## Usage e.g.: sh renamer.sh "/home/user/Desktop/somedir"
> 
> if [ "$1" == "" ]; then echo "error: no directory name given"; exit 1; fi
> if ! cd "$1"; then echo "error: can't cd into dir"; exit 1; fi
> 
> function renamefiles {
> 
> rename -- 'y/A-Z/a-z/' *;
> 
> rename -- 's/á/a/g' *;
> rename -- 's/í/i/g' *;
> rename -- 's/ű/u/g' *;
> rename -- 's/ő/o/g' *;
> rename -- 's/ü/u/g' *;
> rename -- 's/ö/o/g' *;
> rename -- 's/ú/u/g' *;
> rename -- 's/ó/o/g' *;
> rename -- 's/é/e/g' *;
> rename -- 's/Á/a/g' *;
> rename -- 's/Í/i/g' *;
> rename -- 's/Ű/u/g' *;
> rename -- 's/Ő/o/g' *;
> rename -- 's/Ü/u/g' *;
> rename -- 's/Ö/o/g' *;
> rename -- 's/Ú/u/g' *;
> rename -- 's/Ó/o/g' *;
> rename -- 's/É/e/g' *;
> 
> rename -- 's/_-_/-/g' *;
> rename -- 's/_/-/g' *;
> rename -- 's/ /-/g' *;
> 
> rename -- "s/'//g" *;
> rename -- 's/\"//g' *;
> 
> rename -- 's/!//g' *;
> rename -- 's/,//g' *;
> rename -- 's/\(//g' *;
> rename -- 's/\)//g' *;
> rename -- 's/&/-and-/g' *;
> rename -- 's/\*/-/g' *;
> rename -- 's/\\/-/g' *;
> rename -- 's/\$/-/g' *;
> rename -- 's/\?//g' *;
> rename -- 's/#/-/g' *;
> 
> rename -- 's/;/-/g' *;
> rename -- 's/,/-/g' *;
> 
> rename -- 's/\.-/-/g' *;
> rename -- 's/-\./-/g' *;
> rename -- 's/-\.-/-/g' *;
> rename -- 's/\+/-/g' *;
> rename -- 's/%/-/g' *;
> 
> rename -- 's/--------/-/g' *;
> rename -- 's/-------/-/g' *;
> rename -- 's/------/-/g' *;
> rename -- 's/-----/-/g' *;
> rename -- 's/----/-/g' *;
> rename -- 's/---/-/g' *;
> rename -- 's/--/-/g' *;
> rename -- 's/-$//g' *;
> rename -- 's/^-//g' *;
> 
> }
> 
> for i in {0..10000}; do find . -mindepth $i -maxdepth $i -type d |
> while read f; do $(cd "$f"; renamefiles); done; done

There's some redundancies in there, and the many calls to rename make it
terribly inefficient.  The following seems to work.  It depends on GNU
find, but that is a safe assumption on an Ubuntu system.

#! /bin/sh

find "${1-.}" -depth \
        -execdir rename -- "
                y/A-Z/a-z/;
                s/á/a/g;
                s/í/i/g;
                s/ű/u/g;
                s/ő/o/g;
                s/ü/u/g;
                s/ö/o/g;
                s/ú/u/g;
                s/ó/o/g;
                s/é/e/g;
                s/Á/a/g;
                s/Í/i/g;
                s/Ű/u/g;
                s/Ő/o/g;
                s/Ü/u/g;
                s/Ö/o/g;
                s/Ú/u/g;
                s/Ó/o/g;
                s/É/e/g;
                s/_-_/-/g;
                s/[_ *\\$?#;,+%]/-/g;
                s/'//g;
                s/\"//g;
                s/!//g;
                s/,//g;
                s/\(//g;
                s/\)//g;
                s/&/-and-/g;
                s/\.-/-/g;
                s/-\./-/g;
                s/-\.-/-/g;
                s/--+/-/g;
                s/-$//g;
                s/^-//g;" {} +




More information about the ubuntu-users mailing list