Ciao![]()
Sto cercando di capire perché il seguente script non modifica i file come dovrebbe (non fa assolutamente niente). Qui sotto il codice:
Chi può aiutarmi?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
Grazie.![]()

