2010-08-15 28 views

Répondre

5

Je pense que vous vouliez dire "préfixé"

EDIT PLUS TARD

script SH:

 
find . -name ".?*" -exec rm {} \; 
Le code précédent ne fonctionnait pas récursive; celui-ci fait. Si vous voulez supprimer des dossiers aussi, utilisez ceci:
 
find . -name ".?*" -exec rm -R {} \; 

+0

Étant donné l'utilisation de "récursivement" dans la question, je pense que cela devrait être "-name". * "'. Aussi, à moins que votre système ne soit assez vieux et ne le supporte pas encore, '-exec rm {} +' appellera 'rm' en batch au lieu d'une fois par fichier. – Gilles

+0

@Gilles l'a corrigé, merci –

+0

Vous pouvez utiliser 'find. -name "._? *" -exec rm {} \; 'à la place, comme seul le point supprimera tous les fichiers commençant par". ", tels que' .git'. –

1

Edit: utilisateur Gilles ci-dessous correctement indique que la technique alternative suivante peut être dangereux parce que xargs ne traite pas guillemets simples et doubles dans un nom de fichier littéralement. Un fichier portant le nom Today's special.txt entraînerait une erreur (guillemets non terminés). Je l'inclue toujours ici par souci d'exhaustivité, car il est largement mentionné sur le web.

Une autre manière similaire de faire cela sur Unix/Mac en passant par la tuyauterie à rm.

find . -name '.*' -type f | xargs rm -f 

L'argument -type f dit qu'il ne tient pas compte des répertoires et des fichiers spéciaux comme., .., liens symboliques et devs.

Nous ne pouvons malheureusement pas utiliser quelque chose comme rm -R .* parce que le modèle d'entrée .* est développé par le shell avant d'être donné à la commande rm. Cela entraînerait la suppression récursive de tous les fichiers correspondant à ceux du répertoire de départ.

La commande Windows équivalente (del -R .*) est beaucoup plus simple pour l'utilisateur car le programme del fait le travail d'élargir les wildchards pour chaque sous-répertoire.

+1

1. L'argument de '-name' devrait être simplement' '. *' '. 2. Cela ne fonctionnera pas s'il y a un nom de fichier (y compris les répertoires principaux) contenant des espaces ou '\" '', car' xargs' traite ces caractères spécialement.Ne pas utiliser 'xargs' sauf si vous savez avec certitude que ces caractères À la place, comme dans la réponse de Gabi, utilisez plutôt '-exec', car la commande est' rm', le risque de désastre est particulièrement élevé – Gilles

+0

Le type -f fait en sorte que les dirs y compris., .. sont ignorés.Bon point cependant sur les fichiers avec ' et " dans leurs noms.xargs essaie de les interpréter et cela pose problème. Je mettrai à jour ma réponse avec votre mise en garde. Je pense toujours qu'il est utile d'inclure cette façon de faire les choses. Une simple recherche en montre de nombreuses mentions. – Alkaline

2

double possible de this post, et je l'ai utilisé avec succès sur mon propre serveur de production:

find /var/www/html \(-name '.DS_Store' -or -name '._*' \) -delete 
0
 
find . \(-name '.DS_Store' -or -name '._*' \) -type f -print0 | xargs -0 rm -f 

Utilisez cette commande pour inclure des fichiers et des dossiers avec l'espace dans leurs noms dans votre recherche et .