Creare Play senza ripetere titoli
Creare Play senza ripetere titoli
Ho oltre 1000 cd musicali in formato elettronico ed i titoli sono in un file .txt
Vorrei creare più playlist (Play01.txt, Play02.txt, Play03.txt ecc…) contenenti 10 CD cadauna
Nella paylist i titoli dei CD non si devono ripetere.
Come posso fare?
Grazie dell’aiuto!
Luis
Vorrei creare più playlist (Play01.txt, Play02.txt, Play03.txt ecc…) contenenti 10 CD cadauna
Nella paylist i titoli dei CD non si devono ripetere.
Come posso fare?
Grazie dell’aiuto!
Luis
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: Creare Play senza ripetere titoli
Come è strutturato il file origine dei dati e come (inteso con quale linguaggio e modalità) lo vuoi fare?
Fatti non foste a viver come bruti ...
Re: Creare Play senza ripetere titoli
Il file originale dei dati è un semplice file in txt: che si chiama elencotitoli.txt con l'elenco di tutti i titoli dei dischi disponibili ad esempio:
disco1
disco2
disco3
disco4
ecc..
Quando avvio lo script, questo legge a caso 10 titoli e crea il file
Play01.txt
Cancella i 10 titoli utilizzati dal file elencotitoli.txt.
Al successivo riavvio dello script, creerà il file
Play02.txt
cancellando altri 10 titoli dal file elencotitoli.txt.
E così ancora al successivo riavvio
Ecc. ecc..
Per il linguaggio va benissimo la shell BASH
Grazie
disco1
disco2
disco3
disco4
ecc..
Quando avvio lo script, questo legge a caso 10 titoli e crea il file
Play01.txt
Cancella i 10 titoli utilizzati dal file elencotitoli.txt.
Al successivo riavvio dello script, creerà il file
Play02.txt
cancellando altri 10 titoli dal file elencotitoli.txt.
E così ancora al successivo riavvio
Ecc. ecc..
Per il linguaggio va benissimo la shell BASH
Grazie
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: Creare Play senza ripetere titoli
supposto un file, con un contenuto come questo :
lo script che segue fa quanto hai chiesto
sostituisci a "cd_a_menga.txt" il nome del Tuo file, ti costruirà una serie di file "play_num.txt" (ove num è un progressivo di cinque caratteri) ognuno contenente 10 titoli, senza ripetizioni ... ovviamente, maiuscole e minuscole sono caratteri diversi.
Lo script opera nella directory contenente il file da trattare ed, ovviamentre, devi assegnarli i permessi di esecuzione.
questa è una sessione di esempio :
P.S. : Non cancella niente dal file originale, crea solo le playlist
Codice: Seleziona tutto
1 cd a menga
2 cd a menga
3 cd a menga
1 cd a menga
4 cd a menga
5 cd a menga
6 cd a menga
7 cd a menga
1 cd a menga
8 cd a menga
9 cd a menga
10 cd a menga
11 cd a menga
12 cd a menga
13 cd a menga
14 cd a menga
9 cd a menga
15 cd a menga
16 cd a menga
17 cd a menga
18 cd a menga
19 cd a menga
20 cd a menga
21 cd a menga
18 cd a menga
2 cd a menga
23 cd a menga
24 cd a menga
25 cd a menga
22 cd a menga
26 cd a menga
27 cd a menga
Codice: Seleziona tutto
#!/bin/bash
declare -a titoli
counter=0
nplist=1
printf -v npl "%05g" $nplist
fn="play_$npl.txt"
numcd=10
while IFS= read -r riga
do
if [[ " ${titoli[@]} " =~ " ${riga}" ]]
then
echo "titolo doppio : $riga"
else
titoli=( "${titoli[@]}" "$riga")
echo -e "$riga" >> $fn
counter=$((counter + 1))
if [ "$counter" -eq "$numcd" ]
then
counter=0
nplist=$((nplist+1))
printf -v npl "%05g" $nplist
fn="play_$npl.txt"
fi
fi
done < cd_a_menga.txt
Lo script opera nella directory contenente il file da trattare ed, ovviamentre, devi assegnarli i permessi di esecuzione.
questa è una sessione di esempio :
Codice: Seleziona tutto
ls
cd_a_menga.txt playlists.sh
nuzzo@nuzzo-bax:~/src/posts/luisgis$ ./playlists.sh
titolo doppio : 1 cd a menga
titolo doppio : 1 cd a menga
titolo doppio : 9 cd a menga
titolo doppio : 18 cd a menga
titolo doppio : 2 cd a menga
nuzzo@nuzzo-bax:~/src/posts/luisgis$ ls
cd_a_menga.txt play_00001.txt play_00002.txt play_00003.txt playlists.sh
nuzzo@nuzzo-bax:~/src/posts/luisgis$
Fatti non foste a viver come bruti ...
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
Se nel file di testo il nome dei dischi non si ripete, non conviene usare shuf sul file di testo per poi leggerlo riga per riga a gruppi di dieci?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: Creare Play senza ripetere titoli
La condizione posta dallo OP fa supporre che vi siano ripetizioni, @Vae
... a parte questo, vi sono certamente "soluzioni migliori" ma sono andato sul semplice, confesso che è un po' che bazzico poco bash-script e mi ci sto arruginendo
Fatti non foste a viver come bruti ...
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
Allora, no. Il metodo che hai usato mi sa che è il più adatto (mi riferisco soprattutto al controllo con =~ )
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Re: Creare Play senza ripetere titoli
Grazie per il tuo script che potrò controllare nel pomeriggio.
Quando lancio lo script vorrei creare una nuova play, non crearle tutte in una volta.
Inoltre lo script, dovrebbe cancellare dal file elencotitoli.txt i titoli usati.
Grazie
Quando lancio lo script vorrei creare una nuova play, non crearle tutte in una volta.
Inoltre lo script, dovrebbe cancellare dal file elencotitoli.txt i titoli usati.
Grazie
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
@LuisGis
I titoli degli album nel file si ripetono?
I titoli degli album nel file si ripetono?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Re: Creare Play senza ripetere titoli
No, i titoli non si ripetono
- nuzzopippo
- Entusiasta Emergente
- Messaggi: 1627
- Iscrizione: giovedì 12 ottobre 2006, 11:34
Re: Creare Play senza ripetere titoli
Essendo che i titoli non si ripetono, l'o "shuf" di @vaeVictis diventa un'ottima idea, sbrigativo e permette di miscelare casualmente i brani nella play-list.
Purtroppo, NON mi è riuscito di ridurre le righe tramite espressioni regolari in genere (fallito miseramente con "sed -i etc", grep, diff, etc) ricorrendo ad un doppio ciclo di lettura ho comunque ridotto il file dati di origine, questo script dovrebbe dare il risultato richiesto:
L'eliminazione dei dati "originali" non è una operazione che di norma eseguo, consiglio prudenza (una copia di backup è sempre cosa buona e giusta) anche se dai miei test lo script non dovrebbe dare problemi.
Lo script si aspetta il pathname della sorgente dati e la direttrice di destinazione delle playlist
Segue una sessione di esempio con l'uso dello script, la situazione precedente ed i risultati finali ottenuti
Purtroppo, NON mi è riuscito di ridurre le righe tramite espressioni regolari in genere (fallito miseramente con "sed -i etc", grep, diff, etc) ricorrendo ad un doppio ciclo di lettura ho comunque ridotto il file dati di origine, questo script dovrebbe dare il risultato richiesto:
Codice: Seleziona tutto
#!/bin/bash
# utiiizzo: ./single_playkist.sh pathfilename_sorgente pathdir_destinazione
# definizione pathfilename playlist di destinazione
ORIG=$1
DDIR=$2
nplist=1
while [[ "$nplist" != "0" ]]
do
printf -v npl "%05g" $nplist
fn="$DDIR/play_$npl.txt"
if [ -f "$fn" ]
then
nplist=$((nplist+1))
printf -v npl "%05g" $nplist
fn="play_$npl.txt"
else
nplist=0
fi
done
echo "Creo playlist $fn"
# creazione della playlist
shuf -n 10 "$ORIG" > "$fn"
# registro le righe non inserite nella playlist in un file
while read -r riga
do
inplay=0
while read -r song
do
if [[ "$riga" == "$song" ]]
then
inplay=1
break
fi
done < $fn
if [[ "$inplay" == "0" ]]
then
echo "$riga" >> reduct_tmp
fi
done < "$ORIG"
# sostituisco il file dati originale
rm "$ORIG"
mv reduct_tmp "$ORIG"
echo "Origine dati depurata e sostituita"
Lo script si aspetta il pathname della sorgente dati e la direttrice di destinazione delle playlist
Segue una sessione di esempio con l'uso dello script, la situazione precedente ed i risultati finali ottenuti
Codice: Seleziona tutto
tree
.
├── cd_a_menga.txt
├── destinazione
├── playlists.sh
├── single_playlist.sh
└── sorgente
└── cd_a_menga.txt
2 directories, 4 files
NzP:~$ cat sorgente/cd_a_menga.txt
1 cd a menga
2 cd a menga
3 cd a menga
4 cd a menga
5 cd a menga
6 cd a menga
7 cd a menga
8 cd a menga
9 cd a menga
10 cd a menga
11 cd a menga
12 cd a menga
13 cd a menga
14 cd a menga
15 cd a menga
16 cd a menga
17 cd a menga
18 cd a menga
19 cd a menga
20 cd a menga
21 cd a menga
23 cd a menga
24 cd a menga
25 cd a menga
22 cd a menga
26 cd a menga
27 cd a menga
NzP:~$ ./single_playlist.sh sorgente/cd_a_menga.txt destinazione
Creo playlist destinazione/play_00001.txt
Origine dati depurata e sostituita
NzP:~$ tree
.
├── cd_a_menga.txt
├── destinazione
│ └── play_00001.txt
├── playlists.sh
├── single_playlist.sh
└── sorgente
└── cd_a_menga.txt
2 directories, 5 files
NzP:~$ ./single_playlist.sh sorgente/cd_a_menga.txt destinazione
Creo playlist destinazione/play_00002.txt
Origine dati depurata e sostituita
NzP:~$ tree
.
├── cd_a_menga.txt
├── destinazione
│ ├── play_00001.txt
│ └── play_00002.txt
├── playlists.sh
├── single_playlist.sh
└── sorgente
└── cd_a_menga.txt
2 directories, 6 files
NzP:~$ cat destinazione/play_00001.txt
22 cd a menga
12 cd a menga
23 cd a menga
5 cd a menga
27 cd a menga
19 cd a menga
17 cd a menga
9 cd a menga
10 cd a menga
13 cd a menga
NzP:~$ cat destinazione/play_00002.txt
18 cd a menga
20 cd a menga
6 cd a menga
8 cd a menga
24 cd a menga
26 cd a menga
16 cd a menga
4 cd a menga
11 cd a menga
21 cd a menga
NzP:~$ cat sorgente/cd_a_menga.txt
1 cd a menga
2 cd a menga
3 cd a menga
7 cd a menga
14 cd a menga
15 cd a menga
25 cd a menga
NzP:~$
Fatti non foste a viver come bruti ...
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
Se ho capito bene (che i singoli file vanno creati singolarmente (gioco di parole) a ogni chiamata successiva dello script), si potrebbe anche copiare il file dopo lo shuf e lavorare su quello. Semplicemente, a ogni avvio dello script, si leggono e rimuovono le prime dieci righe di quest'ultimo file, le si mettono in un file il cui nome contiene una base fissa e un numero che si può calcolare tranquillamente contando il numero di file con la stessa base fissa nel nome, già presenti nella cartella.
Una aggiunta che si potrebbe fare è quella di impostare con un parametro dello script il numero di righe da leggere dalla "testa" del file "mischiato"
Si potrebbe anche impostare lo script con un parametro ulteriore per fare partire il lettore con la lista dei CD.
@LuisGis
Fammi sapere se ho capito bene con quanto scritto sopra
Al momento non ho il PC sotto mano, domani posto lo script, che comunque è proprio banale.
Una aggiunta che si potrebbe fare è quella di impostare con un parametro dello script il numero di righe da leggere dalla "testa" del file "mischiato"
Si potrebbe anche impostare lo script con un parametro ulteriore per fare partire il lettore con la lista dei CD.
@LuisGis
Fammi sapere se ho capito bene con quanto scritto sopra
Al momento non ho il PC sotto mano, domani posto lo script, che comunque è proprio banale.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Re: Creare Play senza ripetere titoli
Grazie per le vostre news, lo shuf, sembra una ottima scelta!
@nuzzopippo, Ovviamente il file elencotitoli.txt è una copia del file originale.
Purtroppo devo reinstallare Ubuntu e ancora non posso ancora provare lo script
@vaeVictis, hai interpretato benissimo il mio pensiero!
Grazie
@nuzzopippo, Ovviamente il file elencotitoli.txt è una copia del file originale.
Purtroppo devo reinstallare Ubuntu e ancora non posso ancora provare lo script
@vaeVictis, hai interpretato benissimo il mio pensiero!
Grazie
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
Bene, così ho modo di farti lo script.
Domande.
Ti interessano le opzioni aggiuntive?
Se sì,
Che lettore musicale usi?
Ma questi nomi dei CD, poi in qualche modo puoi ricondurli alla posizione del file musicale nell'hhd?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Re: Creare Play senza ripetere titoli
Come lettore uso AVS Media Player.
La play vera e propria la faccio manualmente, inserendo i titoli che mi darà lo script.
La play vera e propria la faccio manualmente, inserendo i titoli che mi darà lo script.
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
Ah, ok. Ma non è lettore per Linux. Non so come si usi.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Re: Creare Play senza ripetere titoli
@ vaeVictis AVS Media Player lo uso raramente e quando lavoro su Windows
generalmente ascolto la musica sul cellulare o iPod, in base alla playlist copio le canzoni che voglio ascoltare.....
Hai avuto tempo per lo script?
Grazie
generalmente ascolto la musica sul cellulare o iPod, in base alla playlist copio le canzoni che voglio ascoltare.....
Hai avuto tempo per lo script?
Grazie
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
Purtroppo no. Sono un po' incasinato. Cerco di postarlo nei prossimi giorni.Hai avuto tempo per lo script?
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
- vaeVictis
- Imperturbabile Insigne
- Messaggi: 4703
- Iscrizione: venerdì 27 luglio 2012, 17:58
- Desktop: Gnome
- Distribuzione: Ubuntu 20.04 64bit
Re: Creare Play senza ripetere titoli
Scusate il doppio messaggio, ma temo che con un edit possa sfuggire all'autore della discussione.
Allora, ho buttato giù lo script:
Come si vede dalla funzione "usage", lo script si usa così:
l'opzione -n non è obbligatoria e indica il numero di "righe" da estrarre dal file iniziale (di default sono 10 come richiesto).
Lo script ha una parte iniziale:
in cui vengono definite alcune variabili e viene fatto il parsing della riga di comando
Poi c'è la parte dello script che fa il lavoro:
Le righe sono commentate, quindi dovrebbero essere di facile comprensione.
Ci tengo a precisare che se lo script non trova un file il cui nome contenga la parola "Play" già presente nella directory del file di input, procede allo shuffle di quest'ultimo.
Altrimenti lo elabora così come è (perché presume che sia già stato mischiato).
Si potrebbe anche aggiungere un parametro per evitare questo comportamento e indicare allo script se si vuole mischiare il file di input o no.
Fammi sapere se ti va bene o vuoi fare delle modifiche.
p.s.:
A margine una considerazione. Lo spirito di questa sezione è quello di aiutare gli utenti, a partire da un codice/pseudocodice che loro abbiano già pronto. Generalmente si evita di fare script from scratch. Magari tienilo in mente per il futuro.
edit:
Mentre aspetto che dai un feedback, ti aggiungo la versione dello script che accetta un parametro per lo shuffle del file di input.
secondo edit:
All'interno di entrambi gli script ho corretto il comando:
in
Ricontrollando ho notato che avevo inserito male i doppi apici, "quotando" il comando invece che la variabile filePath, che potrebbe contenere spazi.
Allora, ho buttato giù lo script:
Codice: Seleziona tutto
#! /bin/bash
usage() { echo "Usage:"
echo "$0 -f filePath [-n count]"
echo "filePath: path del file da analizzare"
echo "count: numero di righe da estrarre (10 di default)"
exit 1
}
nameBase="Play"
zeroFill=04
howMany=10
file_flag=0
while getopts ":f:n:" arg; do
case $arg in
f)
filePath="$OPTARG"
file_flag=1
if [[ ! -f "$filePath" ]]; then
echo "$filePath: file non esistente"
usage
fi
;;
n)
howMany="$OPTARG"
if ! [[ $howMany =~ ^[0-9]+$ ]] ; then
echo "$howMany: non è un numero intero positivo"
usage
fi
;;
\? ) echo "Opzione sconosciuta: -$OPTARG" >&2; exit 1;;
: ) echo "Manca l'argomento per l'opzione -$OPTARG" >&2; exit 1;;
esac
done
if [[ $file_flag -eq 0 ]]; then
echo "Mancano parametri obbligatori"
usage
fi
dirPath=$( dirname "$filePath")
#~ se non trovo file con il nameBase, mischio il file da elaborare
[[ -n $(find "$dirPath" -maxdepth 1 -name "*$nameBase*" ) ]] || shuf -o "$filePath" < "$filePath"
#~ creo il file di output stando attento che non sia già presente
number=1
printf -v outFile '%s-%'$zeroFill'd.txt' "$dirPath/$nameBase" "$number"
while [ -e "$outFile" ]; do
printf -v outFile '%s-%'$zeroFill'd.txt' "$dirPath/$nameBase" "$(( ++number ))"
done
#~ metto le prime dieci righe del file da elaborare nel file di output
head -$howMany "$filePath" > "$outFile"
#~ elimino le prime dieci righe del file da elaborare
sed -i '1,'$howMany'd' "$filePath"
Codice: Seleziona tutto
pathDelloScript -f pathDelFileDiInput [-n count]
Lo script ha una parte iniziale:
Codice: Seleziona tutto
nameBase="Play"
zeroFill=04
howMany=10
file_flag=0
while getopts ":f:n:" arg; do
case $arg in
f)
filePath="$OPTARG"
file_flag=1
if [[ ! -f "$filePath" ]]; then
echo "$filePath: file non esistente"
usage
fi
;;
n)
howMany="$OPTARG"
if ! [[ $howMany =~ ^[0-9]+$ ]] ; then
echo "$howMany: non è un numero intero positivo"
usage
fi
;;
\? ) echo "Opzione sconosciuta: -$OPTARG" >&2; exit 1;;
: ) echo "Manca l'argomento per l'opzione -$OPTARG" >&2; exit 1;;
esac
done
Poi c'è la parte dello script che fa il lavoro:
Codice: Seleziona tutto
dirPath=$( dirname "$filePath")
#~ se non trovo file con il nameBase, mischio il file da elaborare
[[ -n $(find "$dirPath" -maxdepth 1 -name "*$nameBase*" ) ]] || shuf -o "$filePath" < "$filePath"
#~ creo il file di output stando attento che non sia già presente
number=1
printf -v outFile '%s-%'$zeroFill'd.txt' "$dirPath/$nameBase" "$number"
while [ -e "$outFile" ]; do
printf -v outFile '%s-%'$zeroFill'd.txt' "$dirPath/$nameBase" "$(( ++number ))"
done
#~ metto le prime dieci righe del file da elaborare nel file di output
head -$howMany "$filePath" > "$outFile"
#~ elimino le prime dieci righe del file da elaborare
sed -i '1,'$howMany'd' "$filePath"
Ci tengo a precisare che se lo script non trova un file il cui nome contenga la parola "Play" già presente nella directory del file di input, procede allo shuffle di quest'ultimo.
Altrimenti lo elabora così come è (perché presume che sia già stato mischiato).
Si potrebbe anche aggiungere un parametro per evitare questo comportamento e indicare allo script se si vuole mischiare il file di input o no.
Fammi sapere se ti va bene o vuoi fare delle modifiche.
p.s.:
A margine una considerazione. Lo spirito di questa sezione è quello di aiutare gli utenti, a partire da un codice/pseudocodice che loro abbiano già pronto. Generalmente si evita di fare script from scratch. Magari tienilo in mente per il futuro.
edit:
Mentre aspetto che dai un feedback, ti aggiungo la versione dello script che accetta un parametro per lo shuffle del file di input.
Codice: Seleziona tutto
#! /bin/bash
usage() { echo "Usage:"
echo "$0 -f filePath [-s] [-n count]"
echo "filePath: path del file da analizzare"
echo "-s: opzione che indica allo script di mischiare il file di input"
echo "count: numero di righe da estrarre (10 di default)"
exit 1
}
nameBase="Play"
zeroFill=04
howMany=10
file_flag=0
shuffle_flag=0
while getopts ":sf:n:" arg; do
case $arg in
f)
filePath="$OPTARG"
file_flag=1
if [[ ! -f "$filePath" ]]; then
echo "$filePath: file non esistente"
usage
fi
;;
n)
howMany="$OPTARG"
if ! [[ $howMany =~ ^[0-9]+$ ]] ; then
echo "$subDirNum: non è un numero intero positivo"
usage
fi
;;
s)
shuffle_flag=1
;;
\? ) echo "Opzione sconosciuta: -$OPTARG" >&2; exit 1;;
: ) echo "Manca l'argomento per l'opzione -$OPTARG" >&2; exit 1;;
esac
done
if [[ $file_flag -eq 0 ]]; then
echo "Mancano parametri obbligatori"
usage
fi
dirPath=$( dirname "$filePath")
#~ se è impstato lo shuffle_flag, mischio il file da elaborare
[[ $shuffle_flag == 1 ]] && shuf -o "$filePath" < "$filePath"
#~ creo il file di output stando attento che non sia già presente
number=1
printf -v outFile '%s-%'$zeroFill'd.txt' "$dirPath/$nameBase" "$number"
while [ -e "$outFile" ]; do
printf -v outFile '%s-%'$zeroFill'd.txt' "$dirPath/$nameBase" "$(( ++number ))"
done
#~ metto le prime dieci righe del file da elaborare nel file di output
head -$howMany "$filePath" > "$outFile"
#~ elimino le prime dieci righe del file da elaborare
sed -i '1,'$howMany'd' "$filePath"
All'interno di entrambi gli script ho corretto il comando:
Codice: Seleziona tutto
dirPath="$( dirname $filePath)"
Codice: Seleziona tutto
dirPath=$( dirname "$filePath")
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 11 ospiti