Je veux "nettoyer" tous les fichiers d'un répertoire, y compris tous les fichiers dans les sous-répertoires mais je veux laisser les sous-répertoires en place. Je crois comprendre rm -r
que cela supprimera également les sous-répertoires eux-mêmes.
Je ne veux pas supprimer les fichiers cachés (points).
Comment cela peut-il être fait?
command-line
find
rm
Scott Wilton
la source
la source
find -type f ! -name "[.]*" -delete
ne convient pas?-delete
- il suffit d'imprimer les noms de fichiers à supprimer.Réponses:
Utilisez
find
pour cela:la source
-delete
I do not want to delete hidden (dot) files.
+
(du moins pas dans les familles Bourne, csh ou rc). Il y a une légende qui dit que certaines anciennes versions de l'csh
échappement requis{}
mais je ne les ai jamais rencontrées.find . ! -name '.*' ! -type d ! -path '*/.*'
faites le travail.find . -name '.?*' -prune -o ! -type d -exec rm {} +
pour éviter de descendre dans ceux-ci. Notez que ce--
n'est pas nécessaire ici (ne fait pas de mal cependant) puisque les chemins commencent par./
.essayez quelque chose comme:
la source
.... -exec rm {} +
?-exec rm {} +
n'est pas parallèle, il appelle simplementrm
avec plusieurs noms de fichiers. Il exécute moins d'rm
appels et est donc plus convivial pour les ressources. S'il est légèrement moins sûr en ce sens qu'il agrandit la fenêtre de course dans laquelle un composant de répertoire des fichiers à supprimer peut être changé en lien symbolique. Mais seulement-delete
ou-execdir rm {} \;
répondrait pleinement à cela.-exec
standard.-delete
et-execdir
proviennent de BSD cependant, GNU les a ajoutés environ 10 ans plus tard. En tout cas, cela n'a rien à voir avec Linux, qui n'est qu'un noyau.