Non analizzare mai l'output di ls Il
mio suggerimento è di evitare di analizzare l'output di ls [ 1 ] , ancora di più se in combinazione condel
comando. Questo per molte ragioni principalmente legate a caratteri imprevisti e non usuali consentiti nel nome del file.
Anche quando dovresti aspettarti che i nomi dei file appartenenti ai pacchetti Linux "si comportino bene" , questo problema può comunque apparire se altri file sono presenti nella stessa directory ma non lo sapevi o non lo notavi.
È meglio usare find
, l'espansione della scheda (iniziare a scrivere il nome e premere Tab), l' espansione del nome del file [ 2 ] come *MyKey*
...
Una soluzione veloce
Dato che vuoi selezionare tutti i pacchetti (che finiscono con .deb
) con "google" all'interno puoi costruire la tua richiesta con il jolly *
*google*.deb
e fare un semplice
rm -i *google*.deb
che selezionerà ogni nome di file con "google" nel mezzo che finirà per .deb
presente nella directory corrente. L'opzione -i
(interattiva) richiederà la conferma, una buona abitudine quando si eliminano i file con l'espansione del parametro.
Una soluzione vicina alla filosofia del tuo tentativo
Se il tuo scopo è quello di costruire il tuo pezzo da riga di comando pezzo dopo pezzo, così hai fatto ls
, dopo ls | grep google
, e solo dopo aver verificato il tuo output puoi eseguirlo in una subshell $(...)
con
rm -i $(ls | grep google)
Un modo più rapido e pericoloso [ 3 ] è quello di utilizzare!!
ls | grep google
rm -i $(!!)
che eseguirà l'ultimo comando finito nella tua cronologia . Puoi proteggerti dal fatto che non hai alcun controllo visivo della linea che eseguirai se hai abilitato in anticipo le opzioni di shell histverify
con shopt -s histverify
.
rm -i *chrome*.deb