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
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.
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
> 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.
scusami, ma potevi anche usare
find /mio/path -type f -print|while read; do
oppure ...
find . -name '*jpg' -print|while read; do