acard Inviato 14 Settembre 2010 Segnala Condividi Inviato 14 Settembre 2010 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 Altre opzioni di condivisione...
_Alby_85 Inviato 14 Settembre 2010 Segnala Condividi Inviato 14 Settembre 2010 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 Altre opzioni di condivisione...
acard Inviato 14 Settembre 2010 Autore Segnala Condividi Inviato 14 Settembre 2010 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 Altre opzioni di condivisione...
_Alby_85 Inviato 14 Settembre 2010 Segnala Condividi Inviato 14 Settembre 2010 Ottimo!questa mi mancava e potrebbe tornare molto utile! Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.