Vai al contenuto

problema con il globbing [RISOLTO]


acard

Messaggi raccomandati

Ciao a tutti!

Ho un problema apparentemente banale, ma non so dove andare a parare:

in teoria, la shell bash permette di usare il file-globbing, ed infatti se digito la seguente riga in terminale

ls *.txt

funziona e vengono listati solo i files con estensione .txt

Tuttavia, se invece volessi fare il contrario, vale a dire visualizzare tutto TRANNE i .txt, cosa che potrei fare (seguendo le stesse istruzioni che sono nel man) con la seguente riga

ls !(*.txt)

non funziona e mi viene restituita la riga:

bash: !: event not found

E questo ovviamente vale se invece di ls volessi usare cp o qualsiasi altro comando di bash.

Come risolvo?

Ciao!

Link al commento
Condividi su altri siti

Quello che vorresti fare tu non penso sia possibile in un solo comando, dal momento che quando lanci un ls o un cp ecc ecc..deve essere già esplicito quali siano gli argomenti passati a quel comando, ossia il comando stesso deve sapere cosa mostare, cosa copiare ecc ecc.. Cercare di dirgli "mostra tutto tranne che.." oppure "copia tutto tranne che.." suppone che venga fatto un ulteriore passaggio di controllo sugli argomenti, e penso che questo debba essere fatto a mano...io risolverei con un semplice script:

#!/bin/bash
for i in "$PWD/"*; do
if [ ! -d "$i" ]; then
	if [[ "$i" != *".pdf" ]]; then
		ls -l $(basename "$i")
	fi
fi
done

Ovviamente sono mie supposizioni..se esiste un'altra soluzione sarei anch'io molto interessato a conoscerla!:)

Link al commento
Condividi su altri siti

No no, si puo' fare, e' specificato anche nel man di bash.

E sono appena riuscito a capire perche' non funzionava, vale a dire che si deve abilitare l'opzione di shell per l'extended pattern matching.

In altre parole prima si fa cosi':

shopt -s extglob

e poi puoi usare qualsiasi riga di comando che faccia utilizzo dei comandi ? * + @ !

ad esempio puoi copiare tutti i file tranne quelli con estensione .jpg in una nuova cartella nel seguente modo:

cp cartella/*.!(jpg) altracartella/

oppure eliminare tutti i file tranne i file .pdf:

rm !(*.pdf)

e cosi' via!

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...