Vai al contenuto

Benvenuto nella community di Italiamac Forum

Guest Image

Benvenuto su Italiamac, la più grande comunità AMUG italiana riconosciuta da Apple. La consultazione è libera. Se vuoi anche partecipare attivamente alle discussioni pubblicando post e messaggi puoi iscriverti gratuitamente, avrai molti vantaggi:

  • Pubblicare post, messaggi e richieste di aiuto
  • Fare amicizia e usare i messaggi privati fra utenti
  • Pubblicare annunci di vendita di usato
  • Usare tutte le funzioni della community

ISCRIVITI GRATIS


Change Mode






problema con il globbing [RISOLTO]


acard

Recommended Posts

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 di questo messaggio
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 di questo messaggio
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 di questo messaggio
Condividi su altri siti

Archived

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...

Info

Questo sito utilizza cookies, anche di terze parti e profilazione. Utilizzando il sito acconsenti al loro impiego e dichiari di aver letto e di accettare: Privacy Policy Termini di utilizzo