Trova tutti i caratteri di Windows non validi in una cartella e sottocartella

1

Ho bisogno di uno script di Automator che trovi tutti i file con caratteri Windows illegali come <>:/\|?* e sostituisce questi caratteri con un carattere di sottolineatura. Il resto del nome file dovrebbe rimanere invariato.

In alternativa, userei uno script di terminale. So come trovarli con find . -name "*[<>:/\|?*]*" , ma non so come cambiare i nomi correttamente.

Come faccio a fare questo?

    
posta Sebastian Semmler 05.08.2016 - 12:54
fonte

1 risposta

1

Ho trovato una bash one-liner che trova ogni file e cartella con caratteri non validi nel nome e rinomina il file / cartella, cambiando ogni carattere non valido in un trattino:

find . -name "*[<>:\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\|?*]\+/-/g" <<< "$x") && mv -n "$x" "$y" ' \;

È possibile che un file abbia un nome non valido che verrebbe corretto con lo stesso nome legale di un altro file con nome illegale (Esempio: due file chiamati "fle"). Il one-liner di cui sopra non cambierà il nome del secondo (o ulteriore) file di nome illegale che verrebbe corretto con lo stesso nome del primo. Ciò significa che potresti ancora avere alcuni file di nome illegittimo dopo l'esecuzione del one-liner. Dopo aver eseguito questo one-liner, esegui

find . -name "*[<>:\|?*]*"

di nuovo per identificare eventuali file con nomi illegali che esistono ancora. Un modo per affrontare questa situazione è di cambiare il trattino nella sostituzione sed in un altro carattere, ad es. sottolineatura ed esegui di nuovo l'one-liner.

    
risposta data 05.08.2016 - 16:48
fonte

Leggi altre domande sui tag