supprimer des dossiers dans linux bash


4

J'essaie de supprimer dans GNU / Linux tous les dossiers d'un autre dossier commençant par un "." (point), pour cela j'utilise l'utilitaire de recherche, voici ce que j'ai:

find . -iname ^\..* -exec rm -rf {} \;

mais il ne fait rien :(. J'ai déjà testé l'expression régulière et fonctionne bien. Toute aide s'il vous plaît ??

Merci beaucoup pour votre temps.


5
Soyez très prudent. Il y a un .et ..fichier dans chaque répertoire qui sera probablement vous chagrin quand vous rm -rfil :-)

merci pour l'information, je l'ai lu trop tard :( j'ai supprimé un travail très important que je faisais, donc encore une fois :(. Mais je garderai à l'esprit la prochaine fois

Réponses:


5

findutilise la syntaxe de globbing, et vous pouvez utiliser -type dpour rechercher uniquement des répertoires:

find . -type d -name '.?*' | vim -

Vous devez être extrêmement prudent lorsque vous effectuez un déplacement ou que vous utilisez regex pour trouver des .hiddenfichiers, car vous pouvez facilement récupérer .et supprimer tout votre dossier, ou même pire, faire correspondre ..et supprimer tout votre dossier parent. Considérez les conséquences de la commande suivante:

/home/someuser bash$ rm -rf .*

+1 pour le commentaire "fais attention" seul! Je ne suis généralement pas prudent, mais j'ai vu beaucoup d'angoisse et de grincements de dents dans le futur de fkn_man :-)


0
find . -type d -iname ".*" -not -iname "." -not -iname ".."

Rechercher ne répertorie pas .., vous devez donc exclure le premier.

Vous n'avez pas besoin d'exclure non plus avec -mindepth 1.
Ignacio Vazquez-Abrams

0

Si zsh est une option, vous pouvez simplement utiliser: print **/.*(/)ou rmbien sûr :)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.