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.



Rispondere a