Rinominare File in Bulk usando una combinazione di comandi: ls, sed e mv

Ultimamente ho avuto la necessita’ di rinominare una serie di file in bulk.

Tali files erano all’interno di una cartella, la quale veniva usata dal demone samba per la condivisione nella mia rete.

Il problema che avevo era dovuto al fatto che samba mal supporta i file con i nomi troppo lunghi e per tale motivo, se si accede da remoto alla cartella, vediamo una sequenza di caratteri “strani” invece del loro nome originale

Supponiamo di avere un file del genere nella cartella usata da samba

XDCC|OceaN|NewS|26.Trailer.Film22.MD.HDCAM.x264-iND.mkv
XDCC|OceaN|NewS-Time44|26.Trailer.Film1.MD.HDRIP.x264-iND.avi

La stessa cartella, quando vista da remoto da un client samba appariva con nomi diversi come:

XOSHQU~F.mkv
XCKQJB~8.avi

 

Lo script e’ davvero semplice, ed usa una combinazione di tre comandi shell:

  • ls -> usato per scorrere la lista dei files nella cartella
  • sed -> usato per il replace del nome
  • xargs and mv -> usato per il rename effettivo del file

 

[code language=”bash”]
ls *| sed -e ‘p;s/[a-z;A-Z]*|[a-z;A-Z]*|[a-z;A-Z]*\([a-z;A-Z]*\|-[a-z;A-Z]*\)|[0-9]*.//g’ | xargs -n2 mv
[/code]

Se lanciato il comando precede avremo rinominato i file nella seguente maniera

Trailer.Film22.MD.HDCAM.x264-iND.mkv
Trailer.Film1.MD.HDRIP.x264-iND.avi

Permettendo a samba di mostrarli ai client remoti senza gli strani caratteri che abbiamo visto in precedenza.

Riferimenti:
http://www.oreilly.com/openbook/samba/book/ch05_04.html