[ adaxx @ 26.10.2010. 12:26 ] @
treba mi komanda za mass rename, imam muziku na serveru a imena pesama su u ovom formatu:

imepesme.mp3?l=12&dt=6620e990b28df11541a965f7d92241bc
imepesme.mp3?l=12&dt=3223k4jbgz32526g34u6g3i52352iu353
imepesme.mp3?l=12&dt=353jo43ijoih345h2o3i4jo253i34jo6i34j5

da li postoji neka komanda da primer od "?" na desno ostalo brise sve, da su ovi brojevi i slova u produzetku isti ne bi bilo problem, to bi izgledalo ovako

for i in /pfad/www/muzika/*; do mv "$i" "${i//?l=12&dt=6620e990b28df11541a965f7d92241bc/ }"; done

sad sam upravo primetio da ima 32 znakova u ovim heroglifina, dakle moze i komanda za rename/delete zadnjih X slova u imenu,

da li neko zna kako da to resim ?

Hvala unapred...

[Ovu poruku je menjao adaxx dana 26.10.2010. u 14:42 GMT+1]

[Ovu poruku je menjao adaxx dana 26.10.2010. u 14:43 GMT+1]
[ nkrgovic @ 26.10.2010. 13:47 ] @
Probaj :

Code:
$ cut -d\? -p1


To ti odsece sve desno, pocev od "?". Onda to pustis kroz tvoji for petlju i radis mv .
[ Srđan Pavlović @ 26.10.2010. 14:03 ] @
Tip:

srdjan@Desktop ~/proba $ echo $String
Srdjan.mp3abc

srdjan@Desktop ~/proba $ echo ${String%%.mp3*}'.mp3'
Srdjan.mp3

Kao $String uzimaj imena fajlova iz direktorijuma, kroz petlju i odradjuj move u svakom prolazu.

:)

/edit: Znaci izvuci sub-string pre ".mp3" dela, a onda samo jos dodati ".mp3" umesto svog onog sran|a :)

Evo jos jedan primer:


srdjan@Desktop ~/proba $ String='Pavlovic.Srdjan.svastanestojosovdepise'
srdjan@Desktop ~/proba $ echo ${String%%.sva*}'.mp3'
Pavlovic.Srdjan.mp3
srdjan@Desktop ~/proba $


[Ovu poruku je menjao Srđan Pavlović dana 26.10.2010. u 15:17 GMT+1]
[ adaxx @ 26.10.2010. 14:49 ] @
Da li mozes da mi das jedan primer cele komande kako bi izgledala, ja i linux smo razlicita sveta, ali potrebno mi je ovo da sredim muziku na serveru,

primer muzika mi se nalazi u /home/www/website.eu/muzika/

sta i kako trebam da kucam, zamolio bi te ako mozes da mi ispises celu komadnu


Hvala
[ Srđan Pavlović @ 26.10.2010. 15:12 ] @
Ne odgovaram za posledice upotrebe ove moje skripte (ako se potkrala neka greska), ali kod mene radi ovako:

Code:

#!/bin/bash

 echo "Izmeni naziva fajlova..."

 for StariNaziv in ./*

do

  NoviNaziv=${StariNaziv%%.mp3*}'.mp3'
 
  mv -v $StariNaziv $NoviNaziv
 
done



TEST:


srdjan@Desktop ~/proba $ ls -l
total 4
-rw-r--r-- 1 srdjan srdjan 0 2010-10-26 16:09 pesma1.mp3eeeeee
-rw-r--r-- 1 srdjan srdjan 0 2010-10-26 16:09 pesma2.mp3aaaaaa
-rw-r--r-- 1 srdjan srdjan 0 2010-10-26 16:09 pesma3.mp3cccccc
-rw-r--r-- 1 srdjan srdjan 0 2010-10-26 16:09 pesma4.mp3ffffff
-rw-r--r-- 1 srdjan srdjan 0 2010-10-26 16:10 pesma5.mp3gggggg

srdjan@Desktop ~/proba $ ./radi
Izmeni naziva fajlova...
`./pesma1.mp3eeeeee' -> `./pesma1.mp3'
`./pesma2.mp3aaaaaa' -> `./pesma2.mp3'
`./pesma3.mp3cccccc' -> `./pesma3.mp3'
`./pesma4.mp3ffffff' -> `./pesma4.mp3'
`./pesma5.mp3gggggg' -> `./pesma5.mp3'

srdjan@Desktop ~/proba $ ls
pesma1.mp3 pesma2.mp3 pesma3.mp3 pesma4.mp3 pesma5.mp3
srdjan@Desktop ~/proba $


Test skript sam pokrenuo iz tekuceg direktorijuma, gde su ti mp3 fajlovi.
[ Srđan Pavlović @ 26.10.2010. 15:20 ] @
Probaj je prvo iz nekog foldera gde su ti Seka Aleksic i Jelena Karleusa, ili tako nesto.. za svaki slucaj...
[ adaxx @ 26.10.2010. 15:41 ] @
Hvala puno Srdjane, uspelo je,
bas si me nasmejao sa Sekom i Karleusom :)
[ adaxx @ 26.10.2010. 16:45 ] @
Srdjane, a reci mi kako da napravim da radi ovo i za subfoldere, ajd pomagaj :) castim pivo :)
[ nkrgovic @ 26.10.2010. 18:36 ] @
Ajde da probamo sa cut :

Code:
for i in `find . -name \*mp3\*` ; do j=`cut -d\? -f1` && echo "mv $i $j" ; done


Ovo ce samo da ispise komande. Ako radi pokreni jos jednom, pa na kraj dodaj | bash .

(Nisam probao, kuckam iz glave...)
[ maksvel @ 26.10.2010. 21:22 ] @
Hehe, ja nisam uspeo iz glave - tek učim perl (valjda imaš instaliran perl tamo, a?), ali evo sa neta + ja zbrljao malo, na JEDNOM primeru mi je uspelo, ali što kaže Srki, isprobaj prvo na Karleuši (ako je prekoostala od prošlog puta)

Code (perl):

#!/usr/bin/perl
 use warnings;
 use strict;

 use File::Find;

 find(\&mp3, ".");

 sub mp3 {
    next if -d $_;
    next if /^\./;
    next unless /mp3/;

    my $new_name = $_;
    $new_name    =~ s/mp3.*/mp3/g;
    chdir($File::Find::dir);
    rename($_, $new_name) or die $!;
 }
 


Znači, ovo ubaciš u naddirektorijum, a on će posle da šalta nadole
I da - regex ruleZ

[Ovu poruku je menjao maksvel dana 26.10.2010. u 22:37 GMT+1]
[ adaxx @ 27.10.2010. 18:14 ] @
Hmm na zalost ne ide ovo..:( ili ja nesto pogresno radim...

maksvel, da li mozes da mi objasnis malo kako ide to za perl... tekst editor i snimam kao ? i kako se pokrece, mozda sam ja pogresno uradio nesto...

objasnjenje ako moze...

hvala
[ maksvel @ 27.10.2010. 18:59 ] @
Slično kao bash - možeš da staviš ekstenziju .pl ako hoćeš (a i ne mora). Znači, samo ovaj kod u fajl.
Daš prava chmod a+x i pokreneš sa ./imeskripta.pl u glavnom direktorijumu.

(BTW, ima neka fora sa zsh globovima, ali mi to pod Ubuntuom nije proradilo, a bilo bi mnogo elegantno )
rename 's/\.mp3.*/\.mp3/' **/*(.)

Znači, koristi se standardni rename, a on prima i perlove izraze, a ovo sa zvezdicama su ti rekurzivni globovi. Pa ako neko od ovih skriptoljubitelja zna, neka skocka
[ adaxx @ 27.10.2010. 19:25 ] @
[ adaxx @ 27.10.2010. 19:27 ] @
Bas tako sam uradio ali ne die,ja na serveru imam "suse" da li je to mozda neki problem ? ili je to isti krompir samo drugo pakovanje, posto kazes da ti koristis ubuntu...
Ovo mi izbacuje kada startujem skriptu...

: command not foundcode:perl]
./mp3.pl: line 3: use: command not found
: command not found
./mp3.pl: line 4: use: command not found
: command not found
: command not found
./mp3.pl: line 6: use: command not found
: command not found
: command not found
./mp3.pl: line 8: syntax error near unexpected token `\&mp3,'
'/mp3.pl: line 8: ` find(\&mp3, ".");
[ maksvel @ 27.10.2010. 19:37 ] @
Nemaš instaliran perl. :\
Ništa, naći ćemo bash skriptu.
A ovo Nikolino, ne radi ili...?
[ adaxx @ 27.10.2010. 19:46 ] @
Ne radi, probao sam kucam kako je on napisao i stoji ne desava se nista... nisi pise gresku niti nista.....

ako si mislio na ovo
for i in `find . -name \*mp3\*` ; do j=`cut -d\? -f1` && echo "mv $i $j" ; done
[ maksvel @ 27.10.2010. 19:51 ] @
Evo ovaj - isprobao sam ga malopre - ipak, probaj sa nečim rezervnim (ili DODAJ prvo echo ispred mv, pa onda proveri da li radi šta treba)- bash skripta:
Code (bash):

#!/bin/bash
find . -type f -printf '%p\n' | while read file; do
  oldfile=$(basename "$file")
  newfile=$(echo "$oldfile" | sed 's/mp3.*/mp3/g')
  if [ ! "$newfile" == "$oldfile" ]; then
    mv "$file" "${file%$oldfile}$newfile"
  fi
done
 


(nađeno na netu, blago izmenjeno )
[ adaxx @ 27.10.2010. 20:12 ] @
mhm :(

-bash: ./test: /bin/bash^M: bad interpreter: No such file or directory


nece...
[ maksvel @ 27.10.2010. 20:17 ] @
Proveri tekst - izgleda imaš neki karakter viška. Udari delete posle /bin/bash
Probaj čak i bez prve linije...
[ adaxx @ 27.10.2010. 20:28 ] @
bez prve linije isto nece ovo mi izbacuje...

./test: line 7: syntax error near unexpected token `done'
./test: line 7: `done'

a ovo sto si mi reko da udarim del nema praznih polja, :(
[ maksvel @ 27.10.2010. 20:37 ] @
%$&# Uf!
Idi u terminal - uđi u glavni folder (cd tvoj-folder).
Pejstuj sve linije, izuzev prve i udri enter.
[ adaxx @ 27.10.2010. 20:48 ] @
pazi kad hoce :D

hvala puno, imas pivo :))
[ maksvel @ 27.10.2010. 20:59 ] @
Jezus Marija!
E nek' je više proradio...
[ adaxx @ 27.10.2010. 21:08 ] @
hvala, zamisli da sam rucno promenio to na preko 80.000 pesama.....
[ Srđan Pavlović @ 12.11.2010. 21:16 ] @
To bi bio brute-force pristup, hehe :)