Utilizzando i comandi Unix, si scriva un file comandi in shell di Bourne che preveda i seguenti parametri di invocazione:
cercaFile stringa dir num
dove stringa è una stringa, dir é un nome assoluto di directory e num è un intero.
Il file comandi deve esplorare in modo ricorsivo la directory passata come parametro per ricercare tutti i file che siano leggibili dall’utente, che abbiano estensione “.txt†e all’interno dei quali la stringa stringa compaia in almeno num righe.
Al termine delle operazioni, il file comandi deve scrivere a video il nome della directory che contiene il maggior numero di file che soddisfano le condizioni richieste.
Ho dei dubbi su come eseguire il file. Devo creare due file comandi giusto? e non uno unico con cercaFile e cercastringa e inserire il codice che ho scritto sotto e dargli il permesso di esecuzione con chmod u+x nomefile. poi lo eseguo con
sh cercaFile stringa num
ma quando li eseguo mette la linea del codice e scrive cercastringa command not found e non trova /tmp/counter /tmp/max_counter e /tmp/max_dirname, li devo creare io?
********** FILE: cercaFile **********
********** FILE: cercastringa **********
EDIT by Malex: il tag code esiste, usiamolo
EDIT2: e visto che c'è anche il "Rsolto,", sostituiamolo a quello "Problema"
cercaFile stringa dir num
dove stringa è una stringa, dir é un nome assoluto di directory e num è un intero.
Il file comandi deve esplorare in modo ricorsivo la directory passata come parametro per ricercare tutti i file che siano leggibili dall’utente, che abbiano estensione “.txt†e all’interno dei quali la stringa stringa compaia in almeno num righe.
Al termine delle operazioni, il file comandi deve scrivere a video il nome della directory che contiene il maggior numero di file che soddisfano le condizioni richieste.
Ho dei dubbi su come eseguire il file. Devo creare due file comandi giusto? e non uno unico con cercaFile e cercastringa e inserire il codice che ho scritto sotto e dargli il permesso di esecuzione con chmod u+x nomefile. poi lo eseguo con
sh cercaFile stringa num
ma quando li eseguo mette la linea del codice e scrive cercastringa command not found e non trova /tmp/counter /tmp/max_counter e /tmp/max_dirname, li devo creare io?
********** FILE: cercaFile **********
Codice:
#!/bin/sh
PATH=$PATH:/home/sistop
export PATH
if test $# -ne 3
then
echo "Errore: numero argomenti"
exit 1
fi
if ! test -d $2
then
echo "Errore: $2 non è una directory"
exit 2
fi
case $2 in
/*) ;;
*) echo "Errore: il percorso $2 non è assoluto"; exit 3;;
esac
if ! test $3 -gt 0
then
echo "Errore: $3 non è un numero"
exit 4
fi
> /tmp/max_counter
> /tmp/max_dirname
cercastringa $*
echo "La directory con il maggior numero di file è: `cat /tmp/max_dirname`"
rm -f /tmp/max_counter
rm -f /tmp/max_dirname
********** FILE: cercastringa **********
Codice:
#!/bin/sh
cd $2
> /tmp/counter
# per evitare eventuali messaggi di errore usare
# `ls *.txt 2> /dev/null` al posto di *.txt
# nella riga seguente
for i in *.txt
do
if test -f $i -a -r $i -a `grep -c $1 $i` -ge $3
then
echo $i >> /tmp/counter
fi
done
if test `wc -l < /tmp/counter` -gt `wc -l < /tmp/max_counter`
then
rm -f /tmp/max_counter
mv /tmp/counter /tmp/max_counter
echo `pwd` > /tmp/max_dirname
fi
rm -f /tmp/counter
for d in *
do
if test -d $d
then
cercastringa $1 $d $3
fi
done
EDIT by Malex: il tag code esiste, usiamolo
EDIT2: e visto che c'è anche il "Rsolto,", sostituiamolo a quello "Problema"