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,
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).
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ò
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.
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.