J'ai un répertoire sur ma machine Windows 7 qui a des centaines voire des milliers de sous-répertoires. Certains d'entre eux ont des fichiers, d'autres pas. Je veux supprimer tous les répertoires vides.
En regardant les commandes DOS del et rmdir, il ne semble pas que vous puissiez le faire récursivement sans supprimer tous les fichiers. Y a-t-il un moyen de faire cela depuis la ligne de commande?
windows
command-line
Mohlsen
la source
la source
xcopy FROMDIR TODIR /s
. Voir cette réponse SO: stackoverflow.com/a/14742810Réponses:
Vous pouvez utiliser l' utilitaire Supprimer les répertoires vides .
Sinon, vous pouvez utiliser ce fichier de commandes one-liner (à partir de DownloadSquad ):
(si utilisé dans un fichier batch, remplacer
%d
par%%d
)Cela fonctionne car
rd
ne supprimera pas un répertoire contenant des fichiers.la source
Vous pouvez également utiliser ROBOCOPY. Il est très simple et peut également être utilisé pour supprimer des dossiers vides dans une grande hiérarchie.
Ici, les sources et les destinations sont
folder1
, car il vous suffit de supprimer des dossiers vides, au lieu de déplacer d'autres fichiers dans un autre dossier./S
L’option consiste à ignorer la copie (déplacement, dans le cas ci-dessus) de dossiers vides. Il est également plus rapide car les fichiers sont déplacés dans le même lecteur.la source
folder1
? Effrayant, sauf si bien testé./MOVE
copie d’abord les fichiers, puis supprime le fichier source après la copie. Ainsi, comme il/S
est utilisé, il copie les dossiers non vides vers la destination (même dossier dans le cas ci-dessus). Ensuite, il supprime les dossiers vides (par exemple, il pense que les dossiers vides ont déjà été copiés). Non, il ne déplace pas les dossiers imbriquésfolder1
, car ROBOCOPY les déplace de manière récursive.Puisque Cygwin est fourni avec GNU find, vous pouvez le faire:
Ou pour éviter le bruit lorsqu'un dossier n'existe plus:
la source
find . -type d -empty -delete
) échoue à partir de l'invite de commande avec l'erreur suivante:FIND: Parameter format not correct
L'utilitaire gratuit EmptyFolderNuker fait très bien l' affaire , à partir du dossier de base de votre choix. Il supprime également les répertoires contenant uniquement des sous-répertoires vides.
la source
"%~dp0\EmptyFolderNuker.exe" %cd%
.Si vous avez installé Cygwin , vous pouvez faire ceci:
la source
find
(starting-directory)
-depth
-type d ...
-depth
find
Si vous travaillez dans emacs (ce qui rend cette plate-forme agnostique), les opérations suivantes fonctionnent:
la source
D
si je le voulais, mais comme je n'ai pas de besoin commun pour cela, tout ce que je dois taper estM-x *ded RET
et bam-done. (Si je devais effectivement taper ce texte à chaque fois, vous avez absolument raison. Ce serait absurde. Heureusement, ce n'est pas le cas.)M-x *ded RET
a- t -il une signification ou est-ce aléatoire? Dans ce dernier cas, comment gardez-vous une trace de tous les raccourcis que vous avez attribuésemacs
? La mémorisation suffit-elle ou vous trouvez-vous obligé de les rechercher?*ded
est une abréviation du nom complet de la fonction*-delete-empty-directories
. De nombreux moteurs de complétion (tels que ivy, celui que j'utilise) comprennent ce type de correspondance floue. Pour ce qui est de les garder mémorisés… je n'ai tout simplement pas à le faire. Les fonctions que j'ai définies commencent par toutes*
afin que je puisse les retrouver facilement si elles ne sont pas liées à une clé. Sinon, Emacs lui-même me dira s'il y avait un moyen plus rapide d'appeler la fonction. Si tout échoue, il y a toujoursapropos
.Combinaison des messages de Gareth et de G-Man:
Edit: Mais cela a donné une erreur de sécurité à cause de 'C' dans mon PATH var ... donc à la place:
Je n’utilise pas xargs car il semble y avoir une limite de lignes en entrée (environ 1024 lignes, je pense?), Alors que
continue à aller aussi longtemps qu'il a son mot à dire. Si vous ne voulez pas voir les résultats et / ou si vous voulez que les résultats soient plus rapides, laissez l'indicateur verbose '-v'.
la source
Hmmm ... peut-être même une solution plus simple:
for /d /r %d in (*.*) do rd "%d"
Commencez par le dossier où vous voulez que les dossiers vides soient supprimés.
/ d - travaillera sur les dossiers, pas les fichiers / r - recurse les sous-répertoires
la source