Pagina 1 di 1

Correzione automatica nomi files

Inviato: mercoledì 18 settembre 2013, 11:51
da winsum
Ciao a tutti,
vorrei trovare una soluzione al mio problema che adesso vi espongo. Premetto che ho cercato in giro ma non ho trovato quello che cercavo.

Ho dismesso una macchina Windows che ho sostituito con un nuovo pc e con sistema operativo Ubuntu 13 Server.
La vecchia macchina Windows, veniva usata come archivio dei lavori realizzati (disegni con estensione .ai). Non sono io l'autore di questi disegni, ma persone ignare di cosa significhi assegnare ad un file, un nome con caratteri speciali, spazi ecc.

Ad ogni modo con SAMBA ho copiato tutti i files e le directory, dal vecchio Win al nuovo U13 Server (circa 5 ore di copia).
La situazione attuale è che mi ritrovo una cartella denominata "Lavori" nella root del mio file system, dove al suo interno si trovano numerose cartelle con nomi irripetibi (da terminale). A meno che uno non voglia passare la giorna fra backslash \ o altro per entrare in una specifica sotto-directory.

Come se non bastasse, tutte le informazioni relative ai singoli file contenuti nella cartella "Lavori", sono state memorizzate in un DB MySql e vengono ricercate per mezzo di una pagina in PHP che ho realizzato io. Mooooolto artigianale aggiungerei! Però funziona.

Ovviamente nel DB sono memorizzati anche i riferimenti alle directory di dove è posizionato il file, all'interno della cartella "Lavori", quindi con i nomi coposti anche da caratteri speciali e spazi.

Girando fra le varie discussioni ho trovato questa che per metà mi ha aiutato:
http://forum.ubuntu-it.org/viewtopic.php?f=33&t=367657&p=4450688#p4450688

Ho adattato lo script originale

Codice: Seleziona tutto

rename 's/[^a-zA-Z0-9.]//g' *.deb
in

Codice: Seleziona tutto

rename 's/[^a-zA-Z0-9.]//g' *
ed in questo modo vengono modificati anche i nomi delle directory.

Ma come si fa per far eseguire lo script anche alle sotto-directory contenute in "Lavori"? In modo che con una riga di comando tutti i files e le directory all'interno di "Lavori" verranno rinominati senza spazi e senza caratteri speciali.

Fatto questo mi dovrò occupare di modificare tutti i record nel DB in modo che puntino ai nuovi nomi di files e di directory.

Oppure lascio tutto com'è e trovo il modo di modificare la pagina in PHP per la ricerca dei files, in modo che mi prenda in considerazione i caratteri speciali?

Voi cosa fareste?

Vi ringrazio in anticipo.

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 7:29
da toma.luca95
Per rinominare le sottocartelle senza fare script o cose del genere credo ti basti fare

Codice: Seleziona tutto

rename 's/[^a-zA-Z0-9.]//g' */*
E poi aggiungere /* ogni volta fino ad arrivare al livello più interno.
Per la questione DB credo che potresti organizzare una regex che pulisca i nomi, ma per questo non ti so aiutare.

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 12:44
da winsum
Grazie per il consiglio toma.luca95,
ma da come dici, dovrei conoscere in anticipo la struttura di tutte le directory.
Non ce la farei mai.

Un'altra idea?

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 13:18
da toma.luca95
Basta che esegui il comando, freccia su e aggiungi uno /*, invio e così via fino a che non ti dice che non trova più file, io lo facevo con chmod prima di trovare l'argomento che lo fa ricorsivamente.

Es.

Codice: Seleziona tutto

Comando *
Comando */*
Comando */*/*

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 13:42
da winsum
Si ho capito, ma parliamo di 3000 directory + tutte le sotto-directory.

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 13:45
da toma.luca95
Ma la profondità massima sarà 10, 15...

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 14:39
da winsum
No, la profondità massima sarà di 4 o 5 sotto-directory.

Ora ho capito cosa intenti.

Prmo step (per tutte le 3000 directory):

Codice: Seleziona tutto

rename 's/[^a-zA-Z0-9.]//g' *
poi ripeto per il primo strato di profondità:

Codice: Seleziona tutto

rename 's/[^a-zA-Z0-9.]//g' */*
quindi per il secondo:

Codice: Seleziona tutto

rename 's/[^a-zA-Z0-9.]//g' */*/*
.
.
.
fino all'ultimo.
Giusto?

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 14:57
da toma.luca95
Esattamente, io ho fatto così per più comandi e non ho mai avuto problemi

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 19:21
da winsum
Perfetto.
Quindi per automatizzare potrei fare uno script bash "correggi_nomi.sh" tipo questo qui sotto e lo potrei eseguire nella directory che mi interessa:

Codice: Seleziona tutto

#!/bin/bash
rename 's/[^a-zA-Z0-9.]//g' *
rename 's/[^a-zA-Z0-9.]//g' */*
rename 's/[^a-zA-Z0-9.]//g' */*/*
rename 's/[^a-zA-Z0-9.]//g' */*/*/*
rename 's/[^a-zA-Z0-9.]//g' */*/*/*/*
Applico i permessi per eseguire lo script

Codice: Seleziona tutto

chmod +x correggi_nomi.sh
e lo eseguo.
Non ho provato ma credo che questo richieda il sudo.

Quindi se lo inserisco nella directory /etc/rc.d dovrebbe avviarsi senza problemi ma in questo caso dovrei specificare la path assoluta dove dovrà eseguire il rename. In tal caso, utilizzando sempre il comando rename dove dovrei inserire la path "/Lavori"?

Codice: Seleziona tutto

#!/bin/bash
rename 's/[^a-zA-Z0-9.]//g' /Lavori/*
rename 's/[^a-zA-Z0-9.]//g' /Lavori/*/*
rename 's/[^a-zA-Z0-9.]//g' /Lavori/*/*/*
rename 's/[^a-zA-Z0-9.]//g' /Lavori/*/*/*/*
rename 's/[^a-zA-Z0-9.]//g' /Lavori/*/*/*/*/*
Così è giusto?

Re: Correzione automatica nomi files

Inviato: giovedì 19 settembre 2013, 21:31
da toma.luca95
Credo di si...ti conviene provare prima su qualche file a parte, solo per scrupolo.