Ciao
Sto cercando di capire perché il seguente script non modifica i file come dovrebbe (non fa assolutamente niente). Qui sotto 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.