PDA

View Full Version : script per linux


texerasmo
07-09-2006, 15:45
Ciao a tutti dovrei fare questo script
Ho diverse cartelle e dovrei convertirle tutti in minuscoli sia le sue figlie cartelle che i file
MI poete dare un mano?
Lo script deve girare su linux

texerasmo
07-09-2006, 16:03
1 #!/bin/bash
2 for i in $(ls); do
3 oldname="$i"
4 newname=$(echo "$oldname" | tr 'A-Z' 'a-z')
5 if [ "$oldname" != "$newname" ]
6 then
7 mv -i "$oldname" "$newname"
8 fi
9 done


per ora ho trovato questo script ma non è ricorsivo

ilsensine
07-09-2006, 16:15
Sostituisci $(ls) con $(find) e il gioco è fatto.

texerasmo
07-09-2006, 16:28
non mi funziona :(

texerasmo
07-09-2006, 16:37
per ora sto risolvendo in questo modo
lo lancio n volte quando è profondo albero,

andbin
07-09-2006, 16:44
per ora sto risolvendo in questo modo
lo lancio n volte quando è profondo albero,Il ciclo for che hai postato, lo puoi mettere dentro una funzione. Alla funzione passi un argomento che è la directory. Fai un 'cd' per spostarti nella directory poi nel ciclo, dopo aver rinominato il nome, testi se è una directory e, in questo caso, richiami ricorsivamente la funzione passandogli il nome.
Credo che possa funzionare (non ho provato).

kingv
07-09-2006, 21:49
find /path/alla/directory/ -exec perl -e 'for (@ARGV) { rename $_, lc ; }' {} \;

texerasmo
08-09-2006, 10:26
ho fatto il segeunte test

mkdir -p mkdir -p /home/APP/LLL/JJJ/JJJJ/JJJ/GGG

poi


find /home/APP/LLL -exec perl -e 'for (@ARGV) { rename $_, lc ; }' {} \;

ma non mi funge non mi da errore però

texerasmo
08-09-2006, 10:27
ops
ho fatto il segeunte test

mkdir -p /home/APP/LLL/JJJ/JJJJ/JJJ/GGG

poi


find /home/APP/LLL -exec perl -e 'for (@ARGV) { rename $_, lc ; }' {} \;

ma non mi funge non mi da errore però

kingv
08-09-2006, 11:33
hai ragione non funziona se il path che passi a "find" contiene lettere maiuscole, quando ho tempo te lo correggo.

texerasmo
08-09-2006, 15:01
non ti preoccupare
grazie lo stesso.

kingv
08-09-2006, 17:06
ci ho pensato un attimo, rinominare sia file che directory richiede un po' più di codice perchè cambiando il nome delle directory la lista che ottieni all'inizio con il comando "find" non è più valida non appena cambi il nome di una directory (perchè non riesci più a referenziare correttamente i file contenuti, che hanno ancora il path "vecchio", con gli uppercase).

soluzione 1-> ti accontenti di rinominare i file, mettendo un "-type f" tra i parametri del find che richiama il codice perl
soluzione 2-> scrivi un programmino che NON crea la lista di file e directory all'inizio (per il problema che ho spiegato prima), ma analizza una directory per volta ricorsivamente e in ognuna rinomina i file prima della directory "madre".

Ciao

texerasmo
12-09-2006, 11:12
grazie sempre gentilissimo era un cosa che dovevo fare a volo perchè mi hanno mandato un copia di bk masterizzata male.
Come ho detto prima

lancio lo script n volte quando è profondo albero