Ciao

Spero che ora il titolo del thread vada bene.

Ho un problema con il seguente script che, quando lo avvio, non effettua le modifiche che mi aspetto faccia su alcuni file. Questo è il codice:

codice:
#!/bin/bash

#
#   Questo è un piccolo script che prende come argomenti:
#   - il pathname di una directory
#`  - il pathname di un file contenente testo
#`  - una parola chiave
#   - un'opzione per indicare se la ricerca è case sensitive oppure no
#
#   Lo script deve individuare tutti i file contenuti nella directory (ricorsivamente), che abbiano
#   l'estensione specificata (o tutti se assente) e che non contengano la parola chiave specificata 
#   (o tutti se assente)
#
#   Deve, inoltre, aggiungere (all'inizio, prima del testo esistente) ad ognuno di questi file il 
#   testo contenuto nel file di testo specificato
#


if [[ -z "$1" || -z "$2" ]];    # Controlla la presenza degli argomenti
then
   echo "Usage: `basename $0` [PATHNAME] [TEXTFILEPATH] {KEYWORD} {EXTENSION} {-c}"
   echo
   exit 65
fi

if [[ -z "$3" && -z "$4" ]];   # Se non sono presenti la keyword e l'estensione...
then
   if [[ "$5" = "-c" ]];   # Se è presente l'opzione -c allora la ricerca è case sensitive
   then
      for filename in $(find $1 -name "*" -type f)
      do
      wd="$1"
      cat $2 $filename > $wd/filetmp.txt 
      mv $wd/filetmp.txt $filename
      done
   else
   for filename in $(find $1 -iname "*" -type f)     # ...altrimenti è case insensitive
   do
      wd="$1"
      cat $2 $filename > $wd/filetmp.txt 
      mv $wd/filetmp.txt $filename
   done
   fi
fi

if [[ -n "$3" && -z "$4" ]];     # Se è presente la keyword e non è presente l'estensione
then
   if [[ "$5" = "-c" ]];    # Se è presente l'opzione -c allora la ricerca è case sensitive
   then
      for filename in $(find $1 -name "*" -type f | xargs grep -ivq "$3")
      do
      wd="$1"
      cat $2 $filename > $wd/filetmp.txt 
      mv $wd/filetmp.txt $filename
      done
   else
   for filename in $(find $1 -iname "*" -type f | xargs grep -ivq "$3")     # ...altrimenti è case insensitive
   do
      wd="$1"
      cat $2 $filename > $wd/filetmp.txt
      mv $wd/filetmp.txt $filename
   done
   fi
fi

if [[ -z "$3" && -n "$4" ]];     # Se non è presente la keyword ed è presente l'estensione
then
   if [[ "$5" = "-c" ]];     # Se è presente l'opzione -c allora la ricerca è case sensitive
   then
      for filename in $(find $1 -name "*.$4" -type f)
      do
      wd="$1"
      cat $2 $filename > $wd/filetmp.txt 
      mv $wd/filetmp.txt $filename
      done
   else
   for filename in $(find $1 -iname "*.$4" -type f)    # ...altrimenti è case insensitive
      do
      wd="$1"
      cat $2 $filename > $wd/filetmp.txt
      mv $wd/filetmp.txt $filename
   done
   fi
fi

# Altrimenti significa che sono presenti sia la keyword che l'estensione..

if [[ "$5" = "-c" ]];      # Se è presente l'opzione -c allora la ricerca è case sensitive
then
   for filename in $(find $1 -name "*.$4" -type f | xargs grep -ivq "$3")
   do
   wd="$1"
   cat $2 $filename > $wd/filetmp.txt 
   mv $wd/filetmp.txt $filename
   done
   else
   for filename in $(find $1 -iname "*.$4" -type f | xargs grep -ivq "$3")      # ...altrimenti è case insensitive
   do
      wd="$1"
      cat $2 $filename > $wd/filetmp.txt
      mv $wd/filetmp.txt $filename
   done
   fi
fi

exit 0
Chi può aiutarmi?

Grazie.