GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exclure certains fichiers du mécanisme d'expansion de nom de fichier dans Bash ?

J'ai des répertoires du système de fichiers Ubuntu dans le répertoire racine et j'ai accidentellement copié des centaines de fichiers dans le répertoire racine.

J'ai intuitivement essayé de supprimer les fichiers copiés en excluant le système de fichiers comme

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

mais ça marche pas. Quelle est la bonne façon d'exclure certains répertoires tout en supprimant l'ensemble ?

EDIT :N'essayez jamais l'une des commandes ici sans savoir quoi faire !

Réponse acceptée :

Puisque vous utilisez bash :

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

Je recommande d'ajouter echo au début de la ligne de commande lorsque vous exécutez quelque chose qui peut potentiellement faire exploser tout le système. Supprimez-le si vous êtes satisfait du résultat.

Remarque :La commande ci-dessus ne supprimera pas les fichiers cachés (ceux dont le nom commence par un point). Si vous souhaitez également les supprimer, activez également dotglob choix :

shopt -s dotglob

Linux
  1. Comment exclure certaines tailles de fichiers de la copie sous Linux

  2. Est-il possible d'exclure certains fichiers de Rm -rf ? ?

  3. Comment pouvez-vous supprimer les doublons de l'historique bash ?

  4. Comment extraire le nom de fichier sans l'extension d'un chemin complet ?

  5. Comment supprimer les caractères invalides des noms de fichiers ?

Script bash :comment lire des données à partir de fichiers texte

Comment supprimer une commande de l'historique sous Linux

Comment supprimer les caractères (^M) d'un fichier sous Linux

Comment supprimer les espaces des noms de fichiers sous Linux

Comment supprimer des packages d'Ubuntu et de Debian

Comment supprimer les fichiers de zone de mon serveur ?