Risposte:
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
Questo utilizza la sostituzione del comando bash per rimuovere i primi 6 caratteri dal nome del file di input tramite cut, anteporre CLal risultato e memorizzarlo in $newname. Quindi rinomina il vecchio nome con il nuovo nome. Questo viene eseguito su ogni file.
cut -c7-specifica che solo i caratteri dopo l'indice 7 devono essere restituiti dall'input. 7-è un intervallo che inizia all'indice 7 senza fine; cioè fino alla fine della linea.
In precedenza, avevo usato cut -b7-, ma -cavrei dovuto essere usato invece per gestire codifiche di caratteri che potevano avere più byte per carattere, come UTF-8.
Direi il più semplice usare solo il renamecomando che è comune su molte distribuzioni Linux. Esistono due versioni comuni di questo comando, quindi controlla la sua pagina man per trovare quale hai:
## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *
## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
Se vuoi usare la versione di util-linux-ng in un sistema Debian, è disponibile sotto il nome rename.ul
renameesistono più versioni allo stato brado. Controlla la renamedocumentazione locale per capire come utilizzare la tua.
rename TestSR '' *
rename "\<pre\>" "" *->Unterminated <> operator at (user-supplied code).
L'espansione dei parametri della shell è sufficiente per trasformazioni semplici come questa. La sostituzione dei comandi è meno efficiente a causa della necessità di generare processi extra (per la sostituzione dei comandi stessa e cut/ sed).
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
TestSR*trova i file, CL${f#TestSR}sarà il nuovo nome. Il materiale dopo il #sarà sostituito dal nome file ( f).
Ecco un modo:
ls *.{h,m} | while read a; do n=CL$(echo $a | sed -e 's/^Test//'); mv $a $n; done
ls *.{h,m} -> Trova tutti i file con estensione .h o .mn=CL -> Aggiungi un prefisso CL al nome del filesed -e 's/^Test//' -> Rimuove il prefisso Test dal nome del filemv $a $n -> Esegue la ridenominazionePuoi provare con:
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
Vedere man bash(sezione "Espansione dei parametri") per i dettagli.
Beh, non è stato difficile come pensavo.
$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
for f in TestSR*.[mh], for f in TestSR*.{m,h}, for f in TestSR*.m TestSR*.h.
Se hai bisogno di qualcosa di più perlesco, puoi farlo
perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *