Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

aiuto script per rinominare file

0 views
Skip to first unread message

gerlos

unread,
Jul 23, 2008, 8:25:32 PM7/23/08
to
Ciao a tutti,
Mio padre ha deciso di passare dal vecchio Mac PPC ad un nuovo
Macintel. Nel passaggio, si è ritrovato con un'enormità di file (per
lo più immagini jpeg) senza estensione, che Mac Os X non sa come
aprire.

Ora ho tutti questi file su un disco esterno collegato alla mia
linuxbox e vorrei fare uno script che usa find per attraversare tutto
l'albero delle directory, usando il comando file per rilevare i file
contenenti immagini da rinominare, aggiungendo l'estensione ".jpg".

Ora, ho fatto questo script che controlla il tipo di file e la
presenza dell'estensione, e se necessario l'aggiunge:
#!/bin/bash
EXT=jpg
FILE=$1
((echo $FILE | grep -iv $EXT >/dev/null ) && (file $FILE | grep "JPEG"
>/dev/null ) && (mv $FILE ${FILE}.${EXT} )) || (echo $FILE non
modificato )
exit

Questo script funziona correttamente.

Però quando lo metto in mezzo a un ciclo for come segue, mi cominciano
a spuntare problemi con i nomi di file e di directory con gli spazi,
che impediscono il corretto funzionamento del tutto:
#!/bin/bash
EXT='jpg'
for FILE in `find ./`
do
((echo "$FILE" | grep -iv $EXT >/dev/null ) && (file "$FILE" |
grep "JPEG" >/dev/null ) && (mv "${FILE}" "${FILE}.${EXT}" )) || (echo
"$FILE" non modificato )
done
exit

Sicuramente c'è qualcosa che mi sfugge, visto che non funziona.
Inserendo al posto del comando mv un echo, ho notato che i nomi delle
directory e dei file con spazi in mezzo vengono "tagliati" in modo
strano...

Dove sbaglio? Come dovrei correggere lo script per farlo funzionare
correttamente?

grazie a tutti

Antonio 6sette

unread,
Jul 23, 2008, 10:54:53 PM7/23/08
to
On 2008-07-24, gerlos <gerl...@gmail.com> wrote:
[CUT]
> Perň quando lo metto in mezzo a un ciclo for come segue, mi cominciano

> a spuntare problemi con i nomi di file e di directory con gli spazi,
> che impediscono il corretto funzionamento del tutto:
> #!/bin/bash
> EXT='jpg'
> for FILE in `find ./`
> do
> ((echo "$FILE" | grep -iv $EXT >/dev/null ) && (file "$FILE" |
> grep "JPEG" >/dev/null ) && (mv "${FILE}" "${FILE}.${EXT}" )) || (echo
> "$FILE" non modificato )
> done
> exit

se vuoi mantenere gli spazi:

EXT=jpg

ls|while read; do
mv "$REPLY" "$REPLY".${EXT}
done

altrimenti

EXT=jpg

ls|while read; do
mv "$REPLY" "${REPLY// /_}".${EXT}
done

ciao ...

--
Never try to teach a pig to sing.
It wastes your time and annoys the pig.

gerlos

unread,
Jul 24, 2008, 7:48:57 AM7/24/08
to
Antonio 6sette ha scritto:

> se vuoi mantenere gli spazi:
>
> EXT=jpg
>
> ls|while read; do
> mv "$REPLY" "$REPLY".${EXT}
> done
>
> altrimenti
>
> EXT=jpg
>
> ls|while read; do
> mv "$REPLY" "${REPLY// /_}".${EXT}
> done

Eh, però così non posso attraversare tutto l'albero delle directory come
faccio con find, devo lavorare su ogni directory una per una, e non va
bene: le directory sono tante, è sempre il backup di un computer intero,
per giunta tenuto piuttosto disordinato... :-/

grazie lo stesso

ciao
gerlos

--
"Solo lo scienziato è vero poeta: ci dà la luna, ci promette le stelle,
ci farà un nuovo universo se sarà il caso."
< http://gerlos.altervista.org >
gerlos +- - - > gnu/linux registred user #311588

gerlos

unread,
Jul 24, 2008, 8:00:51 AM7/24/08
to
gerlos ha scritto:

> Ora ho tutti questi file su un disco esterno collegato alla mia
> linuxbox e vorrei fare uno script che usa find per attraversare tutto
> l'albero delle directory, usando il comando file per rilevare i file
> contenenti immagini da rinominare, aggiungendo l'estensione ".jpg".

[CUT]


> #!/bin/bash
> EXT=jpg
> FILE=$1
> ((echo $FILE | grep -iv $EXT >/dev/null ) && (file $FILE | grep "JPEG"
>>/dev/null ) && (mv $FILE ${FILE}.${EXT} )) || (echo $FILE non
> modificato )
> exit

Risolto.
Prendo lo script originario (citato sopra), lo chiamo addext.sh, e lo faccio
chiamare da find con l'opzione -exec:

find ./ -exec ./addext.sh '{}' ';'

Così funziona tutto.

Peccato che non sia riuscito a capire come correggere lo script originario,
mi sarebbe piaciuto mettere tutto questo in un unico script che poteva
tornare utile prima o poi.

Antonio 6sette

unread,
Jul 24, 2008, 8:27:35 AM7/24/08
to
On 2008-07-24, gerlos <gerl...@yahoo.it.togli.invalid> wrote:
>> EXT=jpg
>>
>> find /mio/path -name '*.jpg'|while read; do

>> mv "$REPLY" "$REPLY".${EXT}
>> done
>>
> Eh, perň cosě non posso attraversare tutto l'albero delle directory come

> faccio con find, devo lavorare su ogni directory una per una, e non va
> bene: le directory sono tante, č sempre il backup di un computer intero,

> per giunta tenuto piuttosto disordinato... :-/

scusami, ma potevi anche usare

find /mio/path -type f -print|while read; do

oppure ...

find . -name '*jpg' -print|while read; do

0 new messages