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