Script di Bash: rinominare il file batch per rimuovere / modificare tutti i caratteri illegali sotto un filesystem di Windows

Ho bisogno di un aiuto qui, ho un progetto in corso dove abbiamo bisogno di modificare i nomi di file e cartelle all’interno di una directory specifica al fine di rimuovere o sostituire tutti i caratteri che sarebbero considerati illegali sotto Windows, con alcuni caratteri aggiuntivi. Lasciare l’estensione finale

ILLEGAL CHARACTERS:  (greater than) MAKE - : (colon) MAKE - " (double quote) REMOVE / (forward slash) MAKE - \ (backslash) MAKE - | (vertical bar or pipe) MAKE - ? (question mark) REMOVE * (asterisk) REMOVE ADDITIONAL CHARACTERS: REMOVE ' REMOVE % REMOVE # REMOVE ^ REMOVE [email protected]#$%^&()=+][{};,`~ 

Qualsiasi carattere con “MAKE -” accanto ad esso deve essere creato a – (trattino) al posto del carattere, ad esempio un file chiamato John \ Sykes.doc deve diventare John-Sykes.doc. Se il carattere è contrassegnato come “REMOVE”, dovrebbe essere rimosso e non inserire nulla nella sua posizione, ad esempio un file denominato John? Sykes.doc diventerebbe JohnSykes.doc

Questo è un passo piuttosto importante in un progetto molto ampio che stiamo svolgendo nella nostra organizzazione, e finora non sono stato in grado di creare uno script. So come creare versioni semplici, che possono solo cambiare i nomi dei file caso per caso, ma non possono farlo in massa. Ad esempio, posso creare uno script per rimuovere solo @ dai nomi dei file, ma non so come includere cartelle / directory né so come includere tutti gli altri caratteri in questo script.

Idealmente, lo script dovrebbe essere eseguito per la prima volta e produrre un file usando echo con tutte le modifiche che devono essere apportate, incluso il percorso completo e quindi il percorso modificato. Dovrebbe quindi essere necessario modificare leggermente lo script per utilizzare mv, oppure potrebbe fare riferimento al file creato usando echo ed eseguire tutte le modifiche necessarie utilizzandolo …

Qualunque aiuto sarebbe apprezzato poiché questo è davvero piuttosto importante e mi mancano le abilità in questo momento per farlo da solo …

Un’ultima nota, non posso usare il comando #rename. Rompe la nostra politica IT.

MODIFICARE

Non riesco a utilizzare alcuna versione di rinomina, il capo del mio reparto IT. lo ha proibito Sono sicuro che abbia le sue ragioni, ma non posso dire di essere al corrente di loro. Il comando rename non è affatto disponibile sui nostri server.

Questo significa che devo usare pure bash per eseguire l’operazione.

Non ci sono requisiti aggiuntivi. Fondamentalmente ho bisogno di essere in grado di eseguire uno script per produrre tutte le modifiche che verranno apportate a un file, prima che qualcosa venga cambiato. Questo ci consentirà di rivedere i risultati e accertarci che non ci siano trucchetti. Dopodiché, vogliamo eseguire (lo stesso script o uno diverso) per eseguire effettivamente le modifiche.

Tutto ciò di cui ho bisogno è indicato sopra, quindi tutto ciò che è contrassegnato come “MAKE -” deve diventare un trattino e qualsiasi cosa contrassegnata “REMOVE” deve semplicemente andare via.

Se c’è qualcos’altro, per favore chiedi. Farò felicemente un ulteriore commento.

Crea uno script rinominare1.sh:

 #! /bin/bash old=$1 new=${old//[\''"?*%#^[email protected]$&()=+[]{};,`~']} new=${new//['<>:\|']/-} # I removed /, see below. if [[ -e $new ]] ; then if [[ $old != $new ]] ; then echo Cannot rename "$old" to "$new" - target already exists. fi else mv "$old" "$new" fi 

Rinomina un file secondo le regole date usando l’espansione dei parametri. Per rinominare una sottostruttura, eseguila con find :

 find /path -exec rename1.sh {} \; 

Sei sicuro di voler sostituire / con - ? Metterebbe tutti i file nella stessa directory.