Sziasztok!
Mintha lett volna már ilyen kérdés a fórumban, de nem találom:
Egy szkriptre lenne szükségem, ami egy könyvtárstrukturában az ékezetes betűket ekezet nelkulire, a szóközöket pedig ilyen_formán átalakítaná a fájl- és könyvtárnevekben.
Tudtok segíteni?
- 1254 megtekintés
Hozzászólások
man find
man perl/sed/awk
man mv
t
- A hozzászóláshoz be kell jelentkezni
Kb ennyit tudok én is ;)
Egyszer biztosan sorra kerül ez is, de eddig még nem volt időm foglalkozni vele.
- A hozzászóláshoz be kell jelentkezni
find . -depth | while read name
do
dir=`dirname $name`
base=`basename $name`
new_base=`echo "$base" | tr "[áéíóöőüúűÁÉÍÓŐÖÜÚŰ\ ]" "[aeiooouuuAEIOOOUUU_]"`
if [ ! -e "$dir/$new_base" ]
then mv "$dir/$base" "$dir/$new_base"
else echo "Already exists: $dir/$new_base"
fi
done
- A hozzászóláshoz be kell jelentkezni
Köszönöm!
Valami miatt még nem tökéletes:
[1]
[á é]
árak 061112.doc
strukturában futtatva:
~Desktop/1$ sh /home/user/ekezet
dirname: extra operandus: ""é/árak""
Próbáld a "dirname --help"-et.
basename: extra operandus: ""061121.doc""
Próbáld a "basename --help"-et.
Already exists: /
dirname: extra operandus: ""é""
Próbáld a "dirname --help"-et.
mv: stat "/á" sikertelen: Nincs ilyen fájl vagy könyvtár
Already exists: ./.
$
- A hozzászóláshoz be kell jelentkezni
upsz, a harmadik és negyedik sort így:
dir=`dirname "$name"`
base=`basename "$name"`
- A hozzászóláshoz be kell jelentkezni
Az előző hiba megszűnt, de ez lett a nevekből:
á é -> ]e]]o
árak 061112.doc -> ]erak]061121.doc
- A hozzászóláshoz be kell jelentkezni
de latod, mi a baj, nem?
onallosagbol es problemamegoldo keszsegbol egyes, leulhetsz.
t
- A hozzászóláshoz be kell jelentkezni
he?
bekopiznál egy `find .` kimenetet?
- A hozzászóláshoz be kell jelentkezni
Íme:
find .
.
./]e]]o
./]e]]o/]erak]061121.doc
és ez volt az eredeti:
find .
.
./á é
./á é/árak 061121.doc
Tibyke:
hogy őszinte legyek, nem látom, te látod?
- A hozzászóláshoz be kell jelentkezni
Gondolom, van backup az eredeti fájlneveidről. Ha nem, akkor az az így járás tipikus esete, nem kellett volna mástól származó ismeretlen, teszteletlen, szar kódot használni. Szóval a szkript hibás eredményét töröld és indulj ki újra a régi jó ékezetes fájlnevekből.
A tr parancs környékén három hiba van. Az egyik nem lényeges, ez a szögletes zárójelek, amik elvileg semmi vizet nem kavarnak, de semmi szerepük nincs, és arról tesznek tanúságot, hogy imp nem igazán ismeri a tr használatát, vagy legalábbis hirtelen összekeverte valami mással. (Ugyanis lecseréled a [ jelet [-re, a ]-t pedig ]-re. Semmi értelme. Persze a ] nem is ]-re cserélődik, lásd a következő két hibát.)
A másik hiba az idézőjelen belüli backslash majd szóköz, ami arról tesz tanúságot, hogy imp nem igazán ismeri a bash escape-elési szokásait, ez ugyanis backslash és utána szóköz marad.
A harmadik hiba pedig az, hogy az Ubuntu UTF-8 kódolású fájlneveket használ, a tr parancs viszont nem tudja kezelni az UTF-8-at. Tehát a tr felejtős. Helyette sed-et lehet használni például: sed "y/áéí /aei_/"
A szkript többi részét meg sem néztem.
Szóval vak vezet világtalant...
Tibyke, te ugye ezeket mind láttad? Mert az arcod nagy, az kiderült. És a tudásod? Arról még nem győztél meg. Okosabban tennéd, ha csöndben maradnál.
- A hozzászóláshoz be kell jelentkezni
Teszt könyvár és fájl volt, nem bizalmatlanságból, de ahogy mondod, élesben csak a már tesztelt dolgokat...
Szóval nem gond.
Az esti tudásbővítés témája pedig megvan, pár próba után menni fog ez. Csak gondoltam, hátha valakinek már van kész megoldása, és nem kizárólag önös érdekből, sokaknak lehet szüksége rá, ez elég gyakori feladat.
Ha lesz eredmény, természetesen írom.
- A hozzászóláshoz be kell jelentkezni
Tökigazad van, a tr-ben a [,]-t csak rossz beidegződésre tudom fogni, most megjegyeztem, meg hogy az utf8ot is bebukja.
Eszkép: ha jól tudom, a bash-nek három escape szekvenciája van: \", \', \\. Jól tudom?
Meg nézd meg a szkript többi részét is, ha már itt vagy, sértő azt sugallnod, hogy totál inkompetens vagyok...
- A hozzászóláshoz be kell jelentkezni
illetve nem három, hanem ezek is: \(, \), \$, \!, \>, \<, \&, stb. uhh, le van ez írva valahol, hogy milyen kontextusban milyenek vannak?
- A hozzászóláshoz be kell jelentkezni
man bash?
Bocsánat, ha bárki félreértett volna, nem állt szándékomban olyasmit sugallni, hogy totál inkompenens vagy. Azt mondtam, hogy az escape-eléshez nem igazán értesz bash-ben, és ezt úgy tűnik hogy te is megerősíted...
- A hozzászóláshoz be kell jelentkezni
Ha a man bashban benne lett volna, az én kérdésem el nem hangzott volna. Az eszképelés mint most rájöttem, még összetettebb is, mint amennyire azt én az eddigi tapasztalataimból ismerem, főleg, hogy a builtinekben, meg egyéb utilitykben plusz escapeléseket is lehet még használni..
szerk: itt van pár dolog
- A hozzászóláshoz be kell jelentkezni
Amit az általad linkelt helyen látok, az nekem a manpage-ben is benne van, szinte szóról szóra ugyanúgy. Igaz, kevésbé áttekinthetően, nem bontva ilyen szépen fejezetekre.
- A hozzászóláshoz be kell jelentkezni
nem is akarlak meggyozni.
t
- A hozzászóláshoz be kell jelentkezni
detox?
______
[É.N.]
- A hozzászóláshoz be kell jelentkezni
Elsőre jónak tűnik, kipróbálom.
- A hozzászóláshoz be kell jelentkezni