GNU/Linux >> Linux Esercitazione >  >> Linux

Come escludere alcuni file dal meccanismo di espansione del nome file in Bash?

Ho le directory del file system Ubuntu nella directory principale e ho accidentalmente copiato centinaia di file nella directory principale.

Ho provato intuitivamente a rimuovere i file copiati escludendo il file system come

rm -rf !{bin,sbin,usr,opt,lib,var,etc,srv,libx32,lib64,run,boot,proc,sys,dev} ./.

ma non funziona. Qual è il modo corretto per escludere alcune directory mentre si elimina il tutto?

EDIT:Non provare mai nessuno dei comandi qui senza sapere cosa fare!

Risposta accettata:

Dato che stai usando bash :

shopt -s extglob
echo rm -rf ./!(bin|sbin|usr|...)

Consiglio di aggiungere echo all'inizio della riga di comando quando si esegue qualcosa che potenzialmente può far esplodere l'intero sistema. Rimuovilo se sei soddisfatto del risultato.

Nota:il comando sopra non rimuoverà i file nascosti (quelli il cui nome inizia con un punto). Se vuoi rimuovere anche loro, attiva anche dotglob opzione:

shopt -s dotglob

Linux
  1. Come escludere file di determinate dimensioni dalla copia in Linux

  2. Come rimuovo i file dal cestino su Ubuntu?

  3. Come rimuovere le linee che appaiono sul file B da un altro file A?

  4. Come escludere i file dall'archivio TAR usando le espressioni regolari?

  5. Come escludere alcuni utenti dalla schermata principale di Linux?

Scripting Bash:come leggere i dati dai file di testo

Come rimuovere un comando dalla cronologia in Linux

Come rimuovere (^M) caratteri da un file in Linux

Come rimuovere gli spazi dai nomi dei file in Linux

Come rimuovere i pacchetti da Ubuntu e Debian

Come faccio a rimuovere i file di zona dal mio server?