|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2000
Città: Grugliasco (TO)
Messaggi: 1581
|
[bash] script per riniminare file con nomi casuali
Ho un lettore mp3 subacqueo che uso in piscina.
La modalità di riproduzione, però, è solo sequenziale, per cui alal lunga ascolto sempre la stessa lista. M piacerebbe fare uno script che, lanciato, prenda i file della cartella e li rinomini a caso, lasciando solo inalterata l'estensione. Qualcuno sa darmi un aiuto su dove trovare informazioni, o una base da cui partire? Purtroppo non mi sono mai cimentato nella programmazione..
__________________
"Senza deviazione non è possibile il progresso e quindi chiunque devia dalla norma viene considerato pazzo" (Frank Zappa) http://www.relov.it |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Fammi capire, i file vengono riprodotti seguendo l'ordine del nome dei file?
Se è così basta che li ordini in maniera casuale e poi assegni loro un numero progressivo. Non conosco la programmazione bash però ti posso suggerire una soluzione sotto windows tramite powershell. Dettagli circa l'installazione di questo tool li trovi qui http://www.hwupgrade.it/forum/showth...ght=powershell e una volta scaricato il sw standalone powershell analyzer usi questo script dopo aver raggiunto la cartella che ti interessa col comando cd come col classico prompt dei comandi (attenzione che per salire di livello il comando è cd .. con uno spazio dopo cd). Codice:
function out-random { $random = New-Object random $input | sort {$random.next()} } $i = 1; gci | out-random | % {rename-Item $_.name -newname ([string]$i+"_"+$_.name) -whatif; $i++; } ![]() edit. Ah, non avevo pensato al padding. Codice:
function out-random { $random = New-Object random $input | sort {$random.next()} } $i = 1; gci | out-random | % {rename-Item $_.name -newname ("{0:D3}" -f $i+"_"+$_.name) -whatif; $i++; } 1_nomefile, 2_nomefile ecc., avrai 001,002 e così via al fine dell'ordinamento. [/code] Ultima modifica di john_revelator : 01-10-2009 alle 15:39. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
potresti anche lasciare inalterato tutto il nome...e modificare un prefisso iniziale:
for file in `ls *.mp3`;do mv "$file" "$RANDOM"_"$file";done oppure fai solo una cp in una cartella diversa, almeno la puoi generare altri file partendo da quelli originali. così te li ordina per il numero RANDOM generato ------------------------------------- se invece ti basta l'estensione... for file in `ls *.mp3`;do mv "$file" "$RANDOM".mp3;done così puoi rilanciarlo tutte le volte e ogni volta ti rinomina i files ![]()
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] Ultima modifica di zuper : 01-10-2009 alle 15:45. |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
anche se chiaramente consiglio vivamente di tenere il nome del file e aggiungere solo il prefisso iniziale...
dato che è tecnicamente possibile che il RANDOM ti generi sempre lo stesso numero ![]()
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
seppur tecnicamente perfetta come sempre la tua soluzione...
mi permetto di "PUNTUALIZZARE" che mi pare una perdita di tempo fare tutta una funzione per sortare in ordine random per poi dare numeri ordinati ![]() quando anche con il banalissimo dos hai la variabile %RANDOM% ![]() ![]() PS: tanto lo so che non te la prendi se ti correggo ![]() ![]() ![]()
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Sep 2000
Città: Grugliasco (TO)
Messaggi: 1581
|
grazie mille ragazzi!!
![]() Effettivamente avevo anche ventilato la possibilità di aggiungere solo un prefisso al nome file. A questo punto dopo cena mi metto e provo la soluzione proposta, e vediamo se riesco a cambiare un po' l'ordine d'ascolto.
__________________
"Senza deviazione non è possibile il progresso e quindi chiunque devia dalla norma viene considerato pazzo" (Frank Zappa) http://www.relov.it |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Jul 2007
Messaggi: 1092
|
Quote:
![]() @laba: facci sapere come risolvi. ![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2000
Città: Grugliasco (TO)
Messaggi: 1581
|
mi piace aver suscitato un sano confronto...
![]() ho creato lo script (aggiungendo #!bin/bash come prima riga ovviamente) e dando il permesso di esecuzione. Ecco però l'output: Codice:
mv: impossibile eseguire stat di "/media/dati-sda/MUSICA/script/Sunday": Nessun file o directory p.s.:Nel frattempo, sapreste indicarmi qualche buona risorsa su cui iniziare a farmi un po' e ossa con la programmazione shell? Linux Magazine aveva una sezione dedicata, ma io dovrei partire proprio da zero zero
__________________
"Senza deviazione non è possibile il progresso e quindi chiunque devia dalla norma viene considerato pazzo" (Frank Zappa) http://www.relov.it |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
1) ma nello script hai aggiunto un cd per andare nella cartella dove sta la musica?
2) ci sono effettivamente file mp3?
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
lo so...dovresti andare in una clinica per disintossicarti
![]()
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Sep 2000
Città: Grugliasco (TO)
Messaggi: 1581
|
Quote:
2) si, ci sono gli mp3 ![]() ho svelato l'arcano: così com'è lo script si inchioda se incontra nomi di file con gli spazi. Togliendoli o semplicemente sostituendoli son underscore tutto funziona a meraviglia, ecco ad esempio cosa mi ha generato: 9321_13968_3491_benharper-stealmy_kisses.mp3 32498_4301_21617_Blur-CountryHouse.mp3 mi sa che ne approfitto per far togliere gli spazi a tutti gli mp3 che ho, ricordo in passato di aver usato un tool del genere, devo solo ricordarmi quale fosse. Ma google aiuta sempre!
__________________
"Senza deviazione non è possibile il progresso e quindi chiunque devia dalla norma viene considerato pazzo" (Frank Zappa) http://www.relov.it |
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Mar 2001
Città: PV Milano Nord
Messaggi: 3851
|
Quote:
![]() ![]() ![]() ![]() ![]() ![]()
__________________
"W la foca, che dio la benedoca"
poteva risolvere tutto la sinistra negli anni in cui ha governato e non l'ha fatto. O sono incapaci o sta bene anche a "loro" cosi. L'una o l'altra inutile scandalizzarsi.[plutus] |
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Sep 2000
Città: Grugliasco (TO)
Messaggi: 1581
|
hai ragione, anche io sono contro gli spazi nei nomi file..però erano tutte canzoni già codificate così.
Poco male, ho girato un po' e ho trovato questo script, lo posto così se a qualcuno serve lo può usare: Codice:
#!/bin/bash #script che trasforma gli spazi nei file in underscore(_) #Riesce a rinominare anche cartelle e sottocartelle #Lascia invariate Maiuscole e minuscole #se si vogliono cambiare maiuscole in minuscole basta cambiare #tr 'A-Z ' 'A-Z_'` in tr 'A-Z ' 'a-z_'` #Autore Lucio Zara (nick pennega) #Sito www.spaghettilinux.org #Mail pennega@gmail.com #Versione 0.5 #Licenza GPL #funzione usata per rinominare i file RENAMEFILE() { #$FILE non è necessario definirla come locale local FILE=$1 #$1 è la 1° variabile passata alla funzione al momento della sua invocazione #se non ho spazi nel nome file non lo devo rinominare if echo $FILE | grep " " ; then NEWNAMEFILE=`echo $FILE | tr 'A-Z ' 'A-Z_'` #rinomino il file $NEWNAMEFILE contiene il nome del file #con gli spazi traformati in _ mv "$FILE" $NEWNAMEFILE fi } #questa è una funzione ricorsiva RENAMEDIR() { #$DIR è necessario definirla come locale local DIR=$1 if echo $DIR | grep " " ; then NEWNAMEDIR=`echo $DIR | tr 'A-Z ' 'A-Z_'` mv "$DIR" $NEWNAMEDIR else #se non ci sono spazi assegno a $NEWNAMEDIR il valor di $DIR NEWNAMEDIR=$DIR fi #Entro nella dir per verificare se ho altre dir o file cd $NEWNAMEDIR find -maxdepth 1 | while read d; do #il comando find mi restituisce tra i risultati anche la dir corrente ./ #che non và considerata if [ "$d" != "." ]; then #verifico se $d è una directory if [ -d "$d" ]; then #se $d è una directory richiamo la funzione ricorsivamente RENAMEDIR "$d" else #se $d non è una directory richiamo la funzione RENAMEFILE RENAMEFILE "$d" fi fi done #Visto che prima sono entrato in $NEWNAMEDIR adesso devo uscirne per poter continuare cd .. } #MAIN find -maxdepth 1 | while read l; do #il comando find mi restituisce tra i risultati anche la dir corrente ./ #che non va considerata if [ "$l" != "." ]; then #verifico se ho una directory if [ -d "$l" ]; then #richiamo la funzione RENAMEDIR RENAMEDIR "$l" else #richiamo la funzione RENAMEFILE RENAMEFILE "$l" fi fi done
__________________
"Senza deviazione non è possibile il progresso e quindi chiunque devia dalla norma viene considerato pazzo" (Frank Zappa) http://www.relov.it |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:26.