[programmazione] rendere "for XX in *" RICORSIVO

6 risposte [Ultimo messaggio]
Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

ho questo ciclo for:

for filename in *
  do
  echo "$filename" | grep -q " "
  fname=$filename
  n=$(echo $fname | sed -e "s/ /./g")
  mv "$fname" "$n"
done

vorrei che agisse su tutti i file contenuti in tutte le cartelle presenti dove lancio lo script

attualmente funziona, ma considera solo le cartelle e non i file dentro di loro.

suggerimenti?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di aksaf
aksaf
(Guru)
Offline
Guru
Iscritto: 08/03/2011
Messaggi: 957

se le sottocartelle non contengono spazi nei nomi puoi usare find, direi, es:

for my_dir in $(find $PWD -type d)
do
  for filename in $my_dir/*
  do
    echo "$filename" | grep -q " "
    fname=$filename
    n=$(echo $fname | sed -e "s/ /./g")
    mv "$fname" "$n"
  done
done

lancialo una volta con "echo mv ...", per sicurezza

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

aksaf ha scritto:

se le sottocartelle non contengono spazi nei nomi puoi usare find, direi, es:

for my_dir in $(find $PWD -type d)
do
  for filename in $my_dir/*
  do
    echo "$filename" | grep -q " "
    fname=$filename
    n=$(echo $fname | sed -e "s/ /./g")
    mv "$fname" "$n"
  done
done

lancialo una volta con "echo mv ...", per sicurezza

grazie della dritta.. recuper info su find Tongue
ehm, una domanda.. non capisco a cosa serva echo "$filename" | grep -q " ": non dovrebbe mostrare a video il contenuto dalla variabile $filename filtrato con " "? che utilità ha nello scriptino?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di aksaf
aksaf
(Guru)
Offline
Guru
Iscritto: 08/03/2011
Messaggi: 957

doc_pluto ha scritto:

grazie della dritta.. recuper info su find Tongue
ehm, una domanda.. non capisco a cosa serva echo "$filename" | grep -q " ": non dovrebbe mostrare a video il contenuto dalla variabile $filename filtrato con " "? che utilità ha nello scriptino?


ehm l'hai scritto tu Wink prova a vedere il manuale di grep...

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

aksaf ha scritto:

doc_pluto ha scritto:

grazie della dritta.. recuper info su find Tongue
ehm, una domanda.. non capisco a cosa serva echo "$filename" | grep -q " ": non dovrebbe mostrare a video il contenuto dalla variabile $filename filtrato con " "? che utilità ha nello scriptino?


ehm l'hai scritto tu Wink prova a vedere il manuale di grep...

no, lo script l'ho trovato in rete.. io ho provato a modificarlo così
fname=`echo "$filename" | grep -q " "`
ma non funzionava.
dal manuale -q, --quiet, --silent     Elimina tutto l'output normale, ma non capisco cosa significhi.

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia

Ritratto di aksaf
aksaf
(Guru)
Offline
Guru
Iscritto: 08/03/2011
Messaggi: 957

boh, probabilmente si cercava di filtrare via i file con nomi senza spazi (solo un'ipotesi, anche perché ci sono tanti modi per fare la stessa cosa, ovviamente).
Wave

Ritratto di doc_pluto
doc_pluto
(Guru)
Offline
Guru
Iscritto: 08/02/2007
Messaggi: 871

aksaf ha scritto:

boh, probabilmente si cercava di filtrare via i file con nomi senza spazi (solo un'ipotesi, anche perché ci sono tanti modi per fare la stessa cosa, ovviamente).
Wave

ha senso, ma echo non visualizza in output e basta?

Hardware: MB:P5E3_Deluxe - CPU:Core2Duo E8400 3.0GHz - RAM:Kingstone_2Gb_DDR3 - Video:GeForce9600GT/PCI/SSE2 - HD: 2x WDCaviarBlue 1TB
--------------------------------
Software: SO:openSuSE 12.1 - ARCH:64bit - DE:Gnome3 - DriverVideo:Ufficiali Nvidia