Már fáradt vagyok, nem fog az agyam. Adva van vagy 1000 fájl, és csak megszeretném fordítani a fájlnévben lévő dolgokat.
Ezek jelenleg így néznek ki:
"A mű címe - A mű írója.kiterjesztés"
Nekem ez lene a jó:
"A mű írója - A mű címe.kiterjesztés"
Hogy lehetne ezt hatékonyan megoldani?
Nyilván sed lenne a nyerő, de az nekem még mindig kínai.
- 4551 megtekintés
Hozzászólások
echo "Asd dsa asd - adssdsa asdad.txt"|sed -rn 's/^([a-zA-Z ]+) - ([a-zA-Z ]+)/\2 - \1/p'
adssdsa asdad - Asd dsa asd.txt
Módosítsd kedved szerint:)
- A hozzászóláshoz be kell jelentkezni
A sed ezesetben nem csinál semmit az ékezetes karakterek miatt.
Én inkább egy ilyesmi ciklussal szoktam próbálkozni:
for FILE in *.txt; do FNEV=`echo $FILE | awk -F'.' '{print $1}'`; UJNEV=`echo $FNEV | awk -F' - ' '{print $2" - "$1".txt"}'`; mv "$FILE" "$UJNEV"; done
Persze ez is csak akkor műküdik, ha csak egy pont van a kiterjesztés előtt, és csak egy kötőjel a fájlnévben. De tetszés szerint tovább fejleszthető!
- A hozzászóláshoz be kell jelentkezni
Tökéletesen működik nálam ékezetes karakterekkel is.
- A hozzászóláshoz be kell jelentkezni
$ echo "Jókai Mór - Kőszívű ember fiai" | sed -rn 's/^([a-zA-Z ]+) - ([a-zA-Z ]+)/\2 - \1/p'
K - Jókai Mórőszívű ember fiai
$ echo "Jókai-Mór Mór - Kőszívű ember fiai" | sed -rn 's/^([a-zA-Z ]+) - ([a-zA-Z ]+)/\2 - \1/p'
...semmi kimenet, mivel betűt+szóközt keresel...
Én inkább egy ilyenre cserélném:
$ echo "Jókai Mór - Kőszívű ember fiai" | sed -rn 's/^(.+) - (.*)/\2 - \1/p'
Kőszívű ember fiai - Jókai Mór
$ echo "Jókai-Mór Mór - Kőszívű ember fiai" | sed -rn 's/^(.+) - (.*)/\2 - \1/p'
Kőszívű ember fiai - Jókai-Mór Mór
Ilyenkor szerintem hót felesleges betűkre keresni, hiszen úgyis lesz kivétel, amire nem gondoltál (pl. a vezetéknévben van egy pont, pl. D. Nagy Lajos (bár ő nem író, de példának jó), vagy a névben van kötőjel (pl. Deutsch-Für Tamás)), viszont a "szabály" megvan: a "szóköz kötőjel szóköz" előtti rész az író, az utáni rész a cím (plusz mondjuk a kiterjesztés). Érdemes így szétcsapni részekre.
- A hozzászóláshoz be kell jelentkezni
Baromi csúnya, de működik:
#!/bin/bash
for i in `ls /utvonal/ahol/vannak` ; do
IRO=`echo $i | cut -d"-" -f2 | cut -d"." -f1 | sed -e 's/^ *//g' -e 's/ *$//g'`
CIM=`echo $i | cut -d"-" -f1 | sed -e 's/^ *//g' -e 's/ *$//g'`
EXT=`echo $i | cut -d"." -f2 | sed -e 's/^ *//g' -e 's/ *$//g'`
mv $i `echo $IRO" - "$CIM"."$EXT`
done
- A hozzászóláshoz be kell jelentkezni
Javaslatom a prename, ha elérhető. Egyébként Ubuntu-n (és lehet, hogy más rendszereken is) a rename link a prename-re (Perl rename).
> prename -v 's/(.*) - (.*)\.(.*)/$2 - $1.$3/' *
A mű címe 1 - A mű írója 1.kiterjesztés renamed as A mű írója 1 - A mű címe 1.kiterjesztés
A mű címe 2 - A mű írója 2.kiterjesztés renamed as A mű írója 2 - A mű címe 2.kiterjesztés
man prename
perldoc perlre
- A hozzászóláshoz be kell jelentkezni