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!
- 6240 megtekintés
Hozzászólások
subscribe
- A hozzászóláshoz be kell jelentkezni
google: unaccent rename (feeling lucky)
http://www.commandlinefu.com/commands/view/3178/unaccent-an-entire-dire….
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
find -depth, hogy a könyvtárat magát vegye utoljára, miután benne a fájlokat már átnevezted. Ellenkező esetben kirántod magad alól a talajt.
Szóközt tartalmazó fájlnevekkel meg fog gyűlni a bajod, de sok sikert!
- A hozzászóláshoz be kell jelentkezni
A szóközök miatt kerül "" jelek közé a név.
A többi stimmel, szerkesztettem is volna magam, de megtagadva(?)
- A hozzászóláshoz be kell jelentkezni
Azt hiszem, addig lehet szerkeszteni, amíg nincs rá válasz... így jártál :p
- A hozzászóláshoz be kell jelentkezni
Vagy úgy!
Megint okosabb lettem, miután kicsit megint hülyébb voltam. Megérte. :)
- A hozzászóláshoz be kell jelentkezni
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!
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
detox?
--
Don't Panic if you see me laughing,
that's not a bug, just a feature.
- A hozzászóláshoz be kell jelentkezni
Kicsit régi, de erre pont jó.
- A hozzászóláshoz be kell jelentkezni
- #! /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:)
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
Ugyan nem script, de pontosan ezt csinálja: pyRenamer.
- A hozzászóláshoz be kell jelentkezni
#!/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'))
- A hozzászóláshoz be kell jelentkezni