Ho un problema con i nomi di file contenenti uno spazio. Se cerco ad esempio di contare i file che terminano in .jpg ottengo risultati errati. Supponendo che la cartella contenga due file: Pollo 01.jpg Pollo 02.jpg con il seguente script ottengo 4 anziche 2.
#!/bin/bash counter=0 for file_img in `ls * -v1 | grep -i "\.jpg$"`; do : $((counter = $counter + 1)) done echo $counter Gli stessi problemi li ho quando cerco di rinominare in automatico tali file. Se la variabile che contiene il nome del file il comando mv (come tutti gli altri) crede che gli stia passando non un file ma due (ad es. il file Pollo e il file 01.jpg). Mi sono accorto che dalla linea di comando gli spazi vengono sostituiti con "\ " e quindi ho creato uno script che riesce a mettere in una variabile il nome del file con anziche il solo spazio la sequenza "\ " (ad es. anzichè Pollo 01.jpg contiene Pollo\ 01.jpg). Ma non funziona ancora... O meglio, non funziona nello script ma funziona da linea di comando. Lo script che ho creato è il seguente: #!/bin/bash #Scrivo in ls.txt il contenuto della directory corrente ls * -v1 >> ./ls.txt #Ricopio ls.txt in sed.txt sostituendo tutti gli spazi con "\@@" sed -e 's/ /\\@@/g' ./ls.txt >> ./sed.txt counter=1 for file_img_orig in `grep -i "\.jpg" ./sed.txt`; do #Sostituisco "@@" con uno spazio. In questo modo ho sostituito #gli spazi originali con "\ " file_img_orig="`echo $file_img_orig | sed -e 's/@@/ /g'`" file_img_new="Immagine-"$counter".jpg" echo "Rinomino "$file_img_orig" in "$file_img_new mv -f $file_img_orig $file_img_new : $((counter = $counter + 1)) done rm -f ./ls.txt rm -f ./sed.txt Avete idee? Grazie, Pollo.