tömeges átnevezés, ékezet eltávolítása

Sziasztok!

Ki tudnátok segíteni egy olyan szkripttel (bash v python), ami rekurzívan az összes alkönyvtárban található fájlok/könyvtárak nevében kicseréli az ékezetes betűket nem ékezetesekre?

pl Árvíztűrő_tükörfúrógép.mp3 --> Arvizturo_tukorfurogep.mp3 lesz

(Előre is) kösz!

Hozzászólások

Legkontrolláltabban ezt úgy csinálhatod meg, hogy finddal lekérdezed a komplett könyvtárat (célszerűen a neveket idézőjelezve), átirányitva egy fájlba. A fájlról csinálsz egy másolatot, amelyben tetszőleges módszerrel átalakítod az ilyen karaktereket az olyan karakterekre.
A két fájlt paste-tel összefésülöd, és a sorok eljére odanyomod azt, hogy "mv ".
Kész a szkript, át lehet nézni, biztos, ami ziher, és futtatni.


1. find . -exec echo \"{}\" \; > old
2. cp old new
3. edit|tr|sed... new
4. paste old new | sed -e 's/^/mv /' > rename.sh
5. chmod +x rename.sh

exec echo helyett printf, de a legjobb a print0, es akkor a \0-val valasztja el a stringeket.

amugy meg:
man rename

es akkor (nem probaltam ki):
find /ittvan -print0|xargs -0 rename 'y/áéíóöőúüű/aeiooouuu/'

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

No, akkor kibontom a teljes igazságot.

Jómagamnak is soxor szükségem volt ilyen átnevezésekre, mert a netről leakasztott anyagokat sem tárolom ékezetesen. Márpedig ott elsősorban nem latin-[12]-vel vannak teletömve a nevek, sőt nem is elsősorban utf-8-cal, hanem elsősorban mindenfélével. A csak tr-szerű megoldásokban ezért nem bízom.
Gyakorlatilag a mechanizmusom az, amit leírtam, kiegészítve annyival, hogy a vim-nek írtam egy sed-szerű karakterkonverziós eljárást, amely tartalmazza azokat a mappingeket, amelyekre valaha is szükségem volt (olykor még mindig bővül). Így látom, hogy mi történt, és hogy minek kéne még történnie azaz, hogy milyen mapping kéne még, hogy szemétmentes legyen a lista.

detox?

--
Don't Panic if you see me laughing,
that's not a bug, just a feature.

#! /bin/bash
usage()
{
exit 1
}
chacc()
{
echo "$@" | sed 's/ /_/g' | sed 's/[öőó]/o/g' | sed 's/[ŐÓÖ]/O/g'| sed 's/[úűü]/u/g'| sed 's/[ÚŰÜ]/U/g'| sed 's/á/a/g'| sed 's/Á/A/g'| sed 's/é/e/g'| sed 's/É/E/g'| sed 's/í/i/g'| sed 's/Í/I/g' | sed 's/_-_/-/g'
}
[ "x$1" == "x" ] && usage
find "$1" | sort -r | \
while read LINE
do
CDIR=$(dirname "$LINE")
FNAME=$(basename "$LINE")

NNAME=${CDIR}/$(chacc "$FNAME")
[ "$LINE" == "$NNAME" ] || echo "mv $LINE $NNAME"

done

:/
noshátugye echo "mv $LINE $NNAME" csere mv "$LINE" "$NNAME"
akkor elvileg még muxik is:/ ha muxik.

szerk.: NNAME="${CDIR}/$(chacc "$FNAME")" asszem:)

The following shell script can be used to remove accents from filenames in a directory and all subdirectories.


#!/bin/bash
 
function dodir() {
    pushd "$1" >> /dev/null
    for x in *; do
        trans=`echo "$x" | tr "éáóüűúöóíÉÁÓÜŰÚÖÓÍ" "eaouuuooiEAOUUUOOI" | tr -c "[:alnum:]!@#$%^&_,' ()[].\n-" "#"`
        if [ "$trans" != "$x" ]; then
            echo "must rename $x to $trans"
            mv "$x" "$trans"
            if [ -d "$trans" ]; then
                dodir "$trans"
            fi
        else
            if [ -d "$x" ]; then
                dodir "$x"
            fi
        fi
    done
    popd >> /dev/null
};
 
dodir "$1"

---
Ami a windowsban szarrágás, az linuxban hegesztés.
Ha megszeretted a windowst, tanuld meg használni!
A linux igenis felhasználó-, és NEM idiótabarát.
A linuxot mi irányítjuk, a windows minket irányít.


#!/usr/bin/python
import unicodedata,re,os,sys
reCombining = re.compile(u'[\u0300-\u036f\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f]',re.U)
for root, dirs, files in os.walk(sys.argv[1]):
    for f in files:
        os.rename(root+'/'+f,root+'/'+reCombining.sub('',unicodedata.normalize('NFD',unicode(f.decode('utf8')))).encode('ascii'))