[ 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 :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|