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.

Der Hochstapler
la source
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 .*
trop php
la source
+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 :-)
1

-nameet -inameutilisez des globs, pas des regex. Essayez -regexou à la -iregexplace.

Ignacio Vazquez-Abrams
la source
0
find . -type d -iname ".*" -not -iname "." -not -iname ".."
utilisateur31894
la source
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 :)

qbi
la source