Pagina 1 di 1

bash: ciclo for su ls

Inviato: gio 20 apr 2006, 13:21
da venerdi_12
Ciao ragazzi,
il problema è banale, ma non mi riesce di risolverlo.
Sto scrivendo un piccolo script che a partire dai files scaricati tramite swaret --get -a, mi permetta di spostare i files vecchi in un altra directory.
Semplicemente lo script dovrebbe operare sui files, ad esempio, all'interno di /var/swaret/repos/Slacky.it con l'elenco dei files tratto dall'ultimo FILELIST.TXT.

All'uopo pensavo di operare così:
---
lista=/var/sware/repos/mom/lista_Slacky
for pacchetto in $(ls /var/swaret/repos/Slacky.it); do
if grep -q $pacchetto $lista
then
echo "" #non fare nulla
else mv /var/swaret/repos/Slacky.it/$pacchetto altradirectory
fi
done
--
il risultato è una bella serie di:
--
grep: Unmatched [ or [^
--
Dove sbaglio?

Inviato: gio 20 apr 2006, 21:47
da Sawk
if necessita di parentesi quadre:

if [[ `grep -q "$pacchetto" "$lista"` != '' ]]; then


forse così è meglio


ad ogni modo non si capisce che devi fare, puoi spiegare bene senza "--" ? :-)

Inviato: gio 20 apr 2006, 22:22
da albatros
Mah, ho provato una mezz'ora fa con uno script simile e non ho avuto problemi nel non mettere le parantesi...
Ho pensato anch'io a quello e anche a come ls raggruppa i dati, pensando magari di sostituirlo con dir -1, ma anche qui non c'era differenza...
Ho pensato poi che magari ci fosse un errore di battitura (/var/sware al posto di /var/swaret), ma l'errore restutuito da grep è che non trova il file...
Forse è un problema di simboli di formattazione del testo...
Con cosa è stato editato?

L'errore credo sia comunque nel modo in cui grep riceve i dati da elaborare, perlomeno dal messaggio di errore riportato...

Facendo una rapidissima ricerca con google, ho trovato in
http://www.linuxjournal.com/article/1149
la segnalazione che tale errore grep lo dà quando incontra un [ non protetto da backslash...
Non è che nell'input ci sono questi caratteri?