[Linux-Biella] Maiuscolo e minuscolo

Paul TT paultt a bilug.linux.it
Mer 4 Maggio 2005 18:46:14 CEST


Marco Barbera wrote:

>Esiste un comando da shell per poter convertire in minuscolo tutti i nomi di file di una directory e delle sue sottodirectory?
>
>  
>
#!/bin/sh

# Nome del file: mvlc

if test -z "$1"
then
# Lo script č stato chiamato senza parametri
    echo "Sintassi: $0 [-p] [-s] [-i] <nomefile>..."
    echo "Rinomina i file rendendoli minuscoli e" \
         "sostituendo gli spazi con underscore"
# Il carattere \ in fondo alla riga fa continuare il
# comando fino alla riga successiva
    echo "-p: rendi minuscolo anche il path" \
         "e non sono il nome del file"
    echo "-s: non trasformare gli spazi in underscore"
    echo "-i: chiedi conferma per sovrascrivere un file"
fi

pathCompleto=0
# Vale 1 se dobbiamo convertire tutto il path
# Vale 0 se dobbiamo convertire solo il nome del file

da='[A-Z ]'
# Lista dei caratteri da tradurre

a='[a-z_]'
# Lista dei caratteri che vogliamo ottenere

sovrascrivi=""
# Contiene -i se vogliamo la conferma prima di
# sovrascrivere

while test -n "$1"
# Mentre ci sono ancora argomenti sulla linea di comando...
do
    fileMinuscolo=$1

    case $1 in
    -p)    pathCompleto=1
# Dobbiamo convertire i path completi
        ;;
    -s)    da='[A-Z]'
        a='[a-z]'
# Non dobbiamo pių tradurre lo spazio
        ;;
    -i)    sovrascrivi='-i'
# Dobbiamo chiedere conferma per sovrascrivere
        ;;
    *)
# Se siamo qui l'argomento non era un'opzione ma un file
# da convertire
        if test $pathCompleto = 1
        then
            fileMinuscolo=`echo "$1" | tr "$da" "$a"`
# Il comando tr permette di covertire un insieme di
# caratteri
        else
            nomeFile=`basename "$1"`
# Dato un path completo, basename restituisce l'ultima
# componente che nel nostro caso č il file da convertire
            nomeDir=`dirname "$1"`
# Dirname restituisce il path esclusa l'ultima componente
            fileMinuscolo=`echo "$nomeFile" | tr "$da" "$a"`
# Convertiamo solo il nome del file
            fileMinuscolo="$nomeDir/$fileMinuscolo"
# Incolliamo la directory invariata e il nome del file
# convertito
        fi
        ;;
    esac

    if test "$1" != "$fileMinuscolo"
    then
        mv $sovrascrivi "$1" "$fileMinuscolo"
# Rinominiamo se il nome del file originale e quello
# convertito sono diversi
    fi

    shift
# Spostiamo tutti i parametri: $2 diventa $1, $3 diventa $2
# e cosė via
done

# Fine dello script



-- 
Gli uomini non sospettano
quale terribile carico stiano
trasportando a valle.

public gpg key: gpg --keyserver pgp.mit.edu --recv-key 2E61343C



Maggiori informazioni sulla lista Linux