Soluzione 1:
Ero solito scrivere script perl per fare questo, finché non ho scoperto il comando rename.
Accetta una regex perl per eseguire la ridenominazione:
per questo, ho appena digitato due comandi:
rename 's/(\w+)-(\w+)-(\d\d)-(\d{4})-NODATA.txt\$1.$4$3$2.log$//' *
rename 'y/A-Z/a-z/' *.log
Per alcune distro però, rename
non ha questa funzionalità (vedi la sua pagina man) e potresti dover installare perl-rename
o prename
.
Soluzione 2:
mmv è un'utilità Linux standard per spostare/rinominare più file. È disponibile dai repository per la maggior parte delle distribuzioni. Per il tuo esempio sopra, potresti fare:
mmv '*-Log-*-*-*-NODATA.txt' '#l1.#4#3#2.log'
Per ulteriori informazioni, leggi questo articolo debaday o la pagina man.
Soluzione 3:
Dal momento che non ho un comando di rinomina, mi affido a questo:
for myfile in /my/folder/*; do
target=$(echo $myfile|sed -e 's/foo/bar/g')
mv "$myfile" "$target"
done
Soluzione 4:
rename
util non è molto "standard". Ogni distribuzione viene fornita con un rename
diverso attrezzo. Ad esempio, qui su Gentoo, rename
proviene da sys-apps/util-linux
package e non supporta regex.
Hamish Downer suggerito mmv
, sembra utile, specialmente per l'uso all'interno di script.
D'altra parte, per il caso generale, potresti voler renameutils. Ha qmv
e qcp
comandi, che apriranno un editor di testo a tua scelta (la mia preferenza:Vim) e ti permetteranno di modificare lì i nomi dei file di destinazione. Dopo aver salvato e chiuso l'editor, qmv
/qcp
eseguirà tutte le operazioni di ridenominazione.
Entrambi mmv
e qmv
sono abbastanza intelligenti da rinominare i file nell'ordine corretto e anche da rilevare rinominazioni circolari e creeranno automaticamente un file temporaneo se necessario.