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.