supprimer les fichiers par shell

Je suis novice en programmation shell. Fondamentalement, j’ai écrit un petit script qui nettoie certains types de fichiers dans ce dossier particulier lorsqu’il est exécuté:

#!/bin/bash echo "cleaning temp extensions " find -type f -name '*.pyc' -exec rm -f {} ';' find -type f -name '.*.swp' -exec rm -f {} ';' find -type f -name '*~' -exec rm -f {} ';' echo "files cleaned!!" 

Mais maintenant, je veux nettoyer tous les fichiers des dossiers où ce script shell est présent.

Donc, par exemple, si j’ai quelque chose comme

  folderA/ folderB/ folderC/ clean.sh 

Lorsque je lance ce clean.sh, il supprime tous les types de fichiers dans le dossier A folderB et folder C Quelle modification dois-je apporter à ce script? Merci.

Ce que vous demandez n’est pas tout à fait clair.

Pour supprimer TOUS les fichiers du répertoire en cours:

 find . -maxdepth 1 -type -f -delete 

Pour supprimer tous les fichiers du répertoire en cours et tous les répertoires situés en dessous:

 find . -type -f -delete 

Pour supprimer tous les fichiers et répertoires du répertoire en cours:

 find . -delete 

Si vous voulez vraiment supprimer “tous les fichiers des dossiers où ce script shell est présent,” c’est bien fou. Pourquoi voudriez-vous copier un script dans un répertoire afin de supprimer des fichiers dans ce répertoire? Si vous vouliez dire “je ne veux pas pouvoir supprimer des fichiers avec les extensions spécifiées dans un ou plusieurs répertoires spécifiés”, cela fonctionnerait comme ceci:

 #!/usr/bin/env bash find "$@" -type f \( -name '*.pyc' -o -name '*.swp' -o -name '*.~' \) -delete 

Et enregistrez-le dans un répertoire de votre PATH (par exemple /usr/local/bin ), vous pouvez alors dire:

 clean.sh folderA folderB folderC 

Ou tout ce que vous voulez.

Vous pouvez combiner les trois commandes de recherche en une de ces commandes:

 find -type f \( -name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \; 

Maintenant, pour exécuter cette recherche dans un dossier, utilisez:

 find folderA/ -type f \( -name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \; 

Pour supprimer tous les fichiers, supprimez le filtre -name ... :

 find -type f -exec rm -f {} ';' 

Avertissement évident: soyez prudent avec cela.