Je sais comment supprimer récursivement tous les sous-dossiers et tous les fichiers. Mais dans ce cas, je dois préserver les sous-dossiers. En gros, je dois tous les vider.
Donc j'ai
rootdir/
subA/
subB/
subC/
subN/
Et je veux supprimer tous les fichiers de subA
à subN
, mais sans supprimer subA
...subN
Quelle est la commande de la console pour cela? Je suppose que c'est un passage à rm
Vous pouvez utiliser la commande find
pour identifier uniquement les fichiers normaux (type f
) de manière récursive.
find rootdir -type f
Si cela montre les résultats escomptés, supprimez-les réellement
find rootdir -type f -delete
Remarque: il s'agit d'une suppression réelle et non d'un "déplacement dans la corbeille". Soyez donc certain à 100% que c'est ce que vous voulez vraiment faire avant d'exécuter la commande.
En vous appuyant sur la réponse de steeldriver, vous pouvez ajouter xargs pour qu'il n'y ait qu'un seul appel à gvfs-trash. dans son exemple, find
appellera gvfs-trash
une fois pour chaque fichier trouvé par find
. Cela peut être lent s'il y a beaucoup de fichiers:
find . -type f -print0 | xargs -0 gvfs-trash
Vous pouvez également le faire avec la commande rm
, mais vous devrez le faire plusieurs fois.
vous pouvez d’abord cd
pour le répertoire parent avec cette
cd /rootdir
après cela vous devrez courir
rm -rf ./folder/*
Remplacez dossier par le nom du dossier que vous voulez vider (par exemple, subA).
Répétez cette opération jusqu'à ce que tous les dossiers soient vides.
Notez que -rf
supprimera également tous les dossiers du dossier que vous souhaitez vider.
Vous pouvez le faire avec -exec
comme ceci: find rootdir -type f -exec rm {} \;
(notez que la barre oblique inverse est essentielle)