Modifica del nome file condizionale in blocco

0

Ho fatto un sacco di organizzazione dei miei file usando i comandi del terminale (principalmente per ulteriore educazione terminale). Ho imparato a rinominare in massa nel terminale, ad es. sostituendo tutti i caratteri di sottolineatura con spazi, modifiche di maiuscole e minuscole, ecc.

Quello che sto cercando di fare ora è inserire un personaggio, o un set di caratteri, in un posto specifico nel nome del file o condizionalmente.

In sostanza sto cercando di aggiungere un trattino "-" tra il numero della traccia e il titolo di un elenco di file audio.

Quindi, dove ho:
"01 First Track.mp3"
"02 Second Song Title.mp3"
"03 Third.mp3"
"04 Fourth and Final One.mp3"

Vorrei sostituire il "" nella terza posizione per essere "-", lasciando:
"01 - First Track.mp3"
"02 - Second Song Title.mp3"
"03 - Third Thing.mp3"
"04 - Fourth and Final One.mp3"

C'è un modo per aggiungere condizionatamente un personaggio? Dì, controlla un numero (qualsiasi cosa tra 0-9) e sostituisci il personaggio subito dopo con un altro personaggio? Logicamente: per i in *; se $ i === "0-9" e + === "" sostituisci + con "-" .... qualcosa del genere?

In alternativa, potrei semplicemente puntare alla terza posizione del nome del file e inserire "-"?

Il problema con la semplice sostituzione di ALL "" con "-" è che questo sostituirà ogni spazio nel nome del file con un trattino.

Forse c'è un modo per considerare solo la prima istanza di "" nel nome del file e ignorare le istanze successive?

Ma mi piacerebbe sapere se c'è un modo per sostituire i caratteri in modo condizionale. Sono stato google con:
"terminale bulk sostituire carattere condizionale"
"unix file nome file condizionale"

e simili, ma fino ad ora hanno trovato solo rimozione / sostituzione di caratteri o semplice aggiunta (cioè sostituire tutti X con Y o per ogni file, aggiungere un numero sequenziale all'inizio).


Molte grazie.

    
posta personguy 21.07.2014 - 01:52
fonte

1 risposta

1

Probabilmente vuoi usare espressioni regolari per questo. A seconda della versione della tua domanda, è piuttosto semplice. Ci sono un certo numero di buoni siti per iniziare sulle basi. In un certo senso, ne hai già visto un piccolo assaggio: il "*" in "* .mp3" è un concetto di regex (che significa 'corrisponde a qualsiasi simbolo 0 o più volte'). Prova qualcosa di simile ( link ) o ( link ) .

La semplice versione della tua domanda è in effetti davvero molto semplice, quindi potresti farla franca con questo approccio:

echo '01 ab cd.mp3' | sed 's/ / - /'

Questo comando sed è fondamentalmente un trovare e sostituire regex. Trova '' e lo sostituisce con '-', solo la prima volta. (Molto più su sed qui: link )

Sarei anche sorpreso se non ci fossero un numero di script e cose specifici per l'elaborazione di nomi di file mp3 che lo faranno già per te, ma non c'è ragione per cui non puoi farlo da solo nel Terminale.

    
risposta data 21.07.2014 - 03:05
fonte

Leggi altre domande sui tag