GNU/Linux >> Tutoriels Linux >  >> Linux

Supprimer les fichiers et les répertoires par leurs noms. Aucun fichier ou répertoire de ce nom?

Je dois supprimer toutes les données compilées :

  • répertoires appelés build ,
  • répertoires appelés obj ,
  • Fichiers *.so.

J'ai écrit une commande

find ( -name build -o -name obj -o -name *.so ) -exec rm -rf {} ;

qui parcourt tous les répertoires de manière récursive et supprime tout ce dont j'ai besoin.

Pourquoi ai-je une telle sortie à la fin ?
Peut-être devrais-je écrire une commande différente.

find: `./3/obj': No such file or directory
find: `./3/build': No such file or directory
find: `./1/obj': No such file or directory
find: `./1/build': No such file or directory
find: `./2/obj': No such file or directory
find: `./2/build': No such file or directory

Réponse acceptée :

Utilisez -prune sur les répertoires que vous allez supprimer de toute façon pour indiquer find pas la peine d'essayer d'y trouver des fichiers :

find . ( -name build -o -name obj -o -name '*.so' ) -prune -exec rm -rf {} +

Notez également que *.so doit être entre guillemets car sinon il peut être étendu par le shell à la liste de .so fichiers dans le répertoire courant.

L'équivalent de votre GNU -regex -tapez un serait :

find . ( -name build -o -name obj -o -name '*?.so' ) -prune -exec rm -rf {} +

Notez que si vous allez utiliser une syntaxe spécifique à GNU, vous pouvez tout aussi bien utiliser -delete au lieu de -exec rm -rf {} + . Avec -delete , GNU find active -depth automatiquement. Il n'exécute pas de commandes externes, donc de cette façon, c'est plus efficace, et c'est aussi plus sûr car il supprime la condition de concurrence où quelqu'un peut être en mesure de vous faire supprimer les mauvais fichiers en changeant un répertoire en un lien symbolique entre le temps find trouve un fichier et rm le supprime (voir info -f find -n 'Security Considerations for find' pour plus de détails).

find . -regextype posix-egrep -regex '.*/((obj|build)(/.*)?|.+.so)' -delete

Linux
  1. Trouver des fichiers et des répertoires sous Linux comme un pro

  2. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  3. Utilisez Rechercher pour trouver certains répertoires et supprimer tous les fichiers qu'il contient sauf un répertoire ?

  4. Comment rechercher et supprimer des répertoires et des fichiers vides sous Linux

  5. Comment supprimer tous les fichiers d'un répertoire sauf certains ?

Comment copier des fichiers et des répertoires sous Linux

Rechercher et supprimer le fichier le plus ancien s'il y a plus de X fichiers dans un répertoire sous Linux

Comment rechercher et supprimer des fichiers contenant un texte spécifique dans leurs noms sous Linux

Deux commandes pour trouver facilement des fichiers et des répertoires dans Debian 11

Trouvez facilement des fichiers et des répertoires sur Linux

Rechercher des fichiers et imprimer uniquement leurs répertoires parents