Correzione automatica nomi files

Installazione, configurazione e uso di Ubuntu come server: web, ftp, mail, news, proxy, dns e altro.
Scrivi risposta
winsum
Prode Principiante
Messaggi: 24
Iscrizione: lunedì 9 agosto 2010, 18:14

Correzione automatica nomi files

Messaggio 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.
toma.luca95
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 750
Iscrizione: giovedì 25 febbraio 2010, 19:32

Re: Correzione automatica nomi files

Messaggio 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.
winsum
Prode Principiante
Messaggi: 24
Iscrizione: lunedì 9 agosto 2010, 18:14

Re: Correzione automatica nomi files

Messaggio 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?
toma.luca95
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 750
Iscrizione: giovedì 25 febbraio 2010, 19:32

Re: Correzione automatica nomi files

Messaggio 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 */*/*
winsum
Prode Principiante
Messaggi: 24
Iscrizione: lunedì 9 agosto 2010, 18:14

Re: Correzione automatica nomi files

Messaggio da winsum »

Si ho capito, ma parliamo di 3000 directory + tutte le sotto-directory.
toma.luca95
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 750
Iscrizione: giovedì 25 febbraio 2010, 19:32

Re: Correzione automatica nomi files

Messaggio da toma.luca95 »

Ma la profondità massima sarà 10, 15...
winsum
Prode Principiante
Messaggi: 24
Iscrizione: lunedì 9 agosto 2010, 18:14

Re: Correzione automatica nomi files

Messaggio 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?
toma.luca95
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 750
Iscrizione: giovedì 25 febbraio 2010, 19:32

Re: Correzione automatica nomi files

Messaggio da toma.luca95 »

Esattamente, io ho fatto così per più comandi e non ho mai avuto problemi
winsum
Prode Principiante
Messaggi: 24
Iscrizione: lunedì 9 agosto 2010, 18:14

Re: Correzione automatica nomi files

Messaggio 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?
toma.luca95
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 750
Iscrizione: giovedì 25 febbraio 2010, 19:32

Re: Correzione automatica nomi files

Messaggio da toma.luca95 »

Credo di si...ti conviene provare prima su qualche file a parte, solo per scrupolo.
Scrivi risposta

Ritorna a “Ubuntu su server”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 1 ospite