Come seguito alla mia domanda precedente , se ho più file del modulo
sw.ras.001
sw.ras.002
sw.ras.003
…
Quale comando posso usare per rimuovere ras.il mezzo di tutti i file?
\.negli schemi.
Come seguito alla mia domanda precedente , se ho più file del modulo
sw.ras.001
sw.ras.002
sw.ras.003
…
Quale comando posso usare per rimuovere ras.il mezzo di tutti i file?
\.negli schemi.
Risposte:
Puoi farlo con una modifica abbastanza piccola di entrambe le risposte dall'ultima domanda:
rename s/ras\.// sw.ras.*
o
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
Spiegazione:
renameè uno perlscript che accetta perlun'espressione regolare e un elenco di file, applica a sua volta la regex al nome di ciascun file e rinomina ogni file al risultato dell'applicazione della regex. Nel nostro caso, rasviene abbinato letteralmente e \.corrisponde a un letterale .(poiché .da solo indica qualsiasi carattere diverso da una nuova riga), e lo sostituisce con nulla.
Il forciclo prende tutti i file che iniziano con sw.ras.(standard shell glob) e li scorre sopra. ${var/search/replace}ricerca $varper searche sostituisce la prima occorrenza con replace, quindi ${file/ras./}ritorna $fileal primo ras.rimossi. Il comando quindi rinomina il file con lo stesso nome meno ras.. Si noti che con questa ricerca e sostituzione, .viene preso alla lettera, non come un carattere speciale.
Un'altra opzione è utilizzare mmv (Mass MoVe e rinominare):
mmv '*ras.*' '#1#2'
Non dimenticare di usare le virgolette singole attorno ai tuoi schemi, altrimenti le stelle verranno espanse a livello di shell.
L'utilità non è sempre disponibile ma, in caso contrario, è possibile installarla con:
sudo apt-get install mmv
Vedi la pagina man qui .
In ogni shell POSIX ( bash, dash, ksh, ecc):
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
O con rename:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
Recentemente ho dovuto fare una rinominazione in blocco di un numero di file in cui ho dovuto sostituire l'ultima occorrenza di un personaggio in cui il personaggio si è verificato più volte nei nomi dei file. In questo caso particolare ho dovuto sostituire l'ultimo trattino- con un trattino basso _, trasformando questo:
some-long-file-name.ext
in questo:
some-long-file_name.ext
Ci è voluto del tempo, ma alla fine lo ha fatto:
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
Qui:
${i%-*} corrisponde all'inizio del nome file fino all'ultima occorrenza del trattino -${file##*-} corrisponde al resto del nome file dopo l'ultima occorrenza del trattino -
ras, ovvero finire consw..001, o ilras., lasciandosw.001?