web-dev-qa-db-fra.com

Comment supprimer tous les fichiers dans les sous-dossiers, mais pas les sous-dossiers?

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

5
ubuntico

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.

17
steeldriver

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
2
Unacoder

Vous pouvez également le faire avec la commande rm, mais vous devrez le faire plusieurs fois.

vous pouvez d’abord cdpour 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.

1
Rumesh

Vous pouvez le faire avec -exec comme ceci: find rootdir -type f -exec rm {} \; (notez que la barre oblique inverse est essentielle)

0
Tolga Ozses