web-dev-qa-db-fra.com

Supprimer des fichiers dans tous les répertoires d'un répertoire

J'ai récemment eu besoin de supprimer tous les fichiers dans ~ 40 répertoires qui étaient dans un répertoire parent, sans supprimer les répertoires eux-mêmes. J'ai fini par le faire manuellement, mais y a-t-il un moyen plus efficace de le faire? C'est-à-dire, y a-t-il une commande linux qui peut le faire?

Pour une image plus claire de ce que je veux dire:

HomeDirectoryName -> subdirectoryName -> 4 fichiers d’informations sur la simulation

J'ai eu le chemin ci-dessus, sauf qu'il y a 40 sous-répertoires, qui ont chacun 4 fichiers de simulation. J'avais besoin de supprimer tous les fichiers d'informations de simulation sans supprimer les répertoires "subdirectoryName".

Ce n'est peut-être pas possible, car j'ai cherché partout pendant environ une heure avant de décider de le faire manuellement.

2
Red Icing

C'est très simple avec la commande find - utilisez simplement -type f pour rechercher uniquement des fichiers et non des répertoires.

find /path/to/parent/directory -type f -delete

Par défaut, find est récursif dans les sous-répertoires. Ainsi, tous les fichiers de l’arborescence sont répertoriés à partir de ce point.

4
Zanna

depuis le répertoire parent

find -type f -exec rm {} \;

pour supprimer chaque fichier individuellement ou alternativement

find -type f -exec rm {} +

mettre en file d'attente plusieurs fichiers sur rm à la fois.

Pour les passionnés de python, voici une autre solution:

 python -c 'import os;[os.unlink(os.path.join(r,f)) for r,d,fs in os.walk(".") for f in fs]'
3

À partir du répertoire parent

rm */*

supprime les 160 fichiers d’information de simulation sans supprimer les 40 répertoires contenant les fichiers.

(Cela n'a pas d'importance dans ce cas, mais il peut être utile à l'avenir de savoir que rm ne supprimera jamais un répertoire à moins que vous ne le lui demandiez explicitement avec l'option -r.)

0
MJD