bash: ciclo for su ls

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
venerdi_12
Packager
Packager
Messaggi: 258
Iscritto il: sab 9 lug 2005, 0:00
Nome Cognome: Luciano Fattore
Kernel: 3.0
Desktop: kde-4.7.0
Distribuzione: archlinux
Località: Lusciano (Ce)

bash: ciclo for su ls

Messaggio 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?

Avatar utente
Sawk
Linux 3.x
Linux 3.x
Messaggi: 584
Iscritto il: dom 6 feb 2005, 0:00
Località: Pordenone, Italy
Contatta:

Messaggio 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 "--" ? :-)

Avatar utente
albatros
Iper Master
Iper Master
Messaggi: 2093
Iscritto il: sab 4 feb 2006, 13:59
Kernel: 5.19.0
Desktop: gnome and lxqt
Distribuzione: ubuntu 22.04
Località: Darmstadt - Germania

Messaggio 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?

Rispondi