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.
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.
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]'
À 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
.)