Question Comment supprimer des répertoires dont le chemin / les noms sont trop longs pour une suppression normale


Windows semble avoir une limite de longueur pour les noms de fichiers lors de la tentative de suppression, même si cela n'empêche pas la création de ces fichiers.

Notre processus de génération crée un certain nombre de fichiers temporaires (plusieurs construits à partir d’un WSDL) qui ne respectent pas cette limite. Notre script ant est en quelque sorte capable de les supprimer lors d'un nettoyage, mais parfois j'ai besoin de supprimer le répertoire de travail (où vont tous les fichiers temporaires) sans faire un nettoyage complet de ant.

Ce sont les mêmes erreurs cette question, mais les réponses ne fonctionnent pas vraiment pour moi car je traite avec un répertoire, pas un fichier, et je ne sais pas toujours quels fichiers ou sous-répertoires spécifiques sont à l'origine du problème. Et j'essaie d'éviter tout processus manuel (autre que le déclenchement d'une seule commande) pour les supprimer réellement.

Si j'essaie de supprimer le répertoire de l'explorateur, j'obtiens l'erreur

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

En essayant Remove-Item dans powershell donne l'erreur suivante:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item  <<<< -force -Recurse <directory>

Est-ce que quelqu'un connaît des outils ou des moyens simples pour contourner cette erreur de suppression sans avoir à rechercher manuellement les fichiers à problème et à les déplacer / renommer?


349
2017-12-03 19:23


origine


J'ai trouvé la solution juste avant de poster cette question, mais comme d'autres risquent de le rencontrer, j'ai décidé de la publier pour trouver la solution que j'avais trouvée. - Herms
Oh je sais, mais en général quand je fais des choses comme ça, je laisse la question "sans réponse" pendant un moment pour voir si quelqu'un d'autre a une meilleure solution. - Herms
Par Loin la solution la plus simple: youtube.com/watch?v=qQTyTprFAOg - TaW
en utilisant Ubuntu ou tout autre Linux Bootable CD nous pouvons démarrer notre ordinateur à Ubuntu ou tout autre système d'exploitation temporaire. Ensuite, nous pouvons sélectionner le dossier et nous pouvons le supprimer facilement. - kelum priyadarshane
Cette question plus ancienne a aussi des réponses intéressantes: superuser.com/questions/45697/ - AdamV


Réponses:


Utilisez le 7-zip Gestionnaire de fichiers pour les supprimer. Utilisation DécalageDEL insérez le gestionnaire de fichiers 7zip (sinon, Windows essaie de passer à la corbeille qui échouera à nouveau).


392
2017-12-03 19:48



Merci - ceci a éliminé un arbre de répertoire qui était un peu récursif et trop profond pour que del / rmdir / rm / explorer le supprime - Martin Beckett
a bien fonctionné en utilisant shift + Del - 7zip ne pouvait pas envoyer des fichiers à long chemin vers la corbeille .... - cori
+1 7zip. Vous devez accéder au dossier et ensuite utiliser shift + Del comme l'a dit @cori. Si vous sélectionnez le Deleteoption du menu contextuel, il échouera là. shift + Del il! - Urda
7zip ne fonctionnait pas pour win7 64, donc Linux l'a fait. - Erik Friesen
Je soulève cette question car avec 7zip, vous pouvez également supprimer un dossier contenant de longs dossiers imbriqués. J'avais un problème avec un dossier node_module qui contenait des tonnes de dossiers imbriqués et je ne pouvais pas le supprimer. 7zip fixé à partir du dossier de base parfaitement. +1 - Gruber


Aucune des autres réponses (gratuites) n'a fonctionné pour moi, mais j'en ai trouvé une sur un autre site:

rimraf <dir>

rimraf est un Node.js package, vous devrez donc installer Node.js qui comprend npm. Ensuite, vous pouvez exécuter:

npm install -g rimraf

Ensuite, vous pouvez courir rimraf à partir de la ligne de commande.

J'ai trouvé cette solution parce que npm lui-même causait ce problème en raison de la façon dont il nidifie les dépendances.

Au fait, rimraf tire son nom de la commande UNIX rm -rf, qui supprime récursivement les fichiers et les dossiers.


307
2017-07-04 06:23



Essayé plusieurs façons. Cela fonctionne parfaitement! - Duckegg
La meilleure réponse de tous :) Oui, c'est facile - Al-Mothafar
Cela devrait être la réponse acceptée. - NINCOMPOOP
Votre solution fonctionne mais c’est la raison pour laquelle je dois utiliser un module js pour supprimer les dossiers des modules js du noeud ... Je ne veux plus vivre sur cette planète - Benoit P
Node a créé le problème en premier lieu pour moi, donc ... intéressant ... qu'ils ont aussi une solution. - Eric J.


Il y a pas besoin d'installer un programme pour résoudre ce problème.

Ce problème est facilement résolu en utilisant robocopy, préinstallé depuis Windows Vista, lancé en 2006.

Par exemple, rmdir /S /Q <dir> a été signalé à échoué dans certains cas. Il n'est pas nécessaire d'utiliser 7zip ou tout autre outil tiers. Powershell est un excès. Cygwin peut fonctionner, mais vous ne pouvez pas l'avoir installé. Alors, concentrons-nous sur robocopy

L'idée est de

  1. utilisation robocopy copier + mis à jour
  2. d'un nouveau dossier vide 
  3. dans le dossier que vous souhaitez supprimer, la cible.

Après excursion robocopy, le répertoire cible serait également vide.

Ces instructions sont pour la ligne de commande. Ouvrez simplement la recherche sous Windows, tapez cmd et appuyez sur Entrée.

Disons que le dossier que nous voulons supprimer, la cible, est

C:\delete\this folder\with a very long name 

  1. Commencez par créer un répertoire vide, f.i. C:\emptyfolder.

    mkdir C: \ dossier vide

  2. Copier + mettre à jour depuis le répertoire vide vers la cible, en utilisant l'option "/ purge"

    robocopy c: \ dossier vide "C: \ delete \ ce dossier \ avec un nom très long" / purger

  3. Supprimez le répertoire vide. Vous n'en avez plus besoin.

    rmdir c: \ dossier vide

Comme il n'y a pas de fichiers ou de dossiers dans le répertoire source (C:\emptyfolder), il supprime simplement les fichiers et dossiers du répertoire cible (C:\delete\this folder\with a very long name) récursivement!

  • Dernier tour: vous pouvez éviter d'écrire à la main

    C: \ delete \ ce dossier \ avec un nom très long

    En faisant glisser le dossier depuis une fenêtre de l'explorateur et en le déposant dans la fenêtre Terminal / cmd.

Faites attention: Les fichiers supprimés ne va pas à la poubelle dossier! Une fois supprimés, les fichiers ne peuvent plus être récupérés.

(Pris à partir de "Chemin trop long? Utilisez Robocopy" par BVLANGEN)

PS: Je me rends compte que cette réponse était là, moins didactique. Comment supprimer un fichier dans Windows avec un nom de fichier trop long? [dupliquer]

Benoit ajoutée:

Vous devrez peut-être suivre ce processus plus d'une fois pour vous débarrasser de tous les fichiers.


117
2018-03-03 16:45



Merci bien monsieur !! Cela devrait être la réponse acceptée comme tous les autres soit n'a pas fonctionné ou requis un Outil tiers. :) - MickyD
Cela fonctionne parfaitement ... pas besoin d'installer quoi que ce soit (pour autant que je sache) et c'est rapide. Cela devrait être la réponse acceptée! - ksumarine
Cela conserve une partie (ou la totalité) de l'arborescence sous "c: \ deletefolder" (répertoire cible). Quoi qu'il en soit, j'ai tout supprimé en un clin d'œil (devinez que les fichiers étaient petits) et je devais juste manuellement <Del> "c: \ deletefolder", les répertoires des enfants ont été supprimés sans problème. Travaillé comme un charme. +1, devrait être la réponse acceptée! :) - rld.
@rld, mais "deletefolder" existait-il avant? Sinon, je pense qu'il devrait être vide s'il s'agissait d'un nouveau répertoire. Sinon c'est un bordel. Je pourrais ajouter une dernière étape pour "rmdir deletefolder". - hectorpal
@hectorpal 1. J'avais un arbre avec les restes d'une sauvegarde du lecteur Windows C à partir d'une autre machine, que j'ai réussi à supprimer, sauf pour les très longues parties, à savoir. "% USERPROFILE% / foo / very_long_dirname / vldn2 / vldn3 /(...)/ very_long_filename". 2. cd ~; mkdir empty; robocopy empty foo /purge 3. Je suis resté avec ~ / foo / maybe_something_deeper_too_cant_remember / et je n'ai pas vraiment pris le temps d'enquêter davantage car j'étais déjà énervé contre M $ pour m'avoir manqué de respect et perdre mon temps, mais un simple <Delete> sur ~ / foo dans explorer a été supprimé avec succès, après l'échec sans fin (même avec la propriété) jusqu'à robocopy. - rld.


Je crois que j'ai trouvé un moyen de supprimer les choses de cmd. A l'origine j'ai essayé le del commande, mais cela n'a pas fonctionné. Puis je me suis souvenu rmdir. Faire ce qui suit:

rmdir /S /Q <dir>

semble avoir fonctionné.


79
2017-12-03 19:24



N'a pas fonctionné pour moi :( - Andrew Arnott
n'oubliez pas de vous déplacer dans cmd avant d'essayer de lancer rmdir. - brianpeiris
Pour ceux qui ne peuvent pas utiliser cette solution, j'ai une solution alternative qui a fonctionné pour moi (avec un nom de fichier / chemin trop long): Déplacez le ou les fichiers / répertoire vers C: \ pour raccourcir le chemin, puis supprimez-le. - Anders Sandberg Nordbø
Il est possible d'avoir des répertoires pour lesquels cette solution ne fonctionnera pas, que 7-Zip peut supprimer. Je viens juste d'avoir ça pour moi. - SamStephens
Cette solution permet d'obtenir des résultats incohérents. S'il vous plaît, ne le vote pas. - hectorpal


L'outil que j'ai utilisé lorsque j'ai eu ce problème était FastCopy. j'ai sélectionné Supprimer tout à partir du menu déroulant, a sélectionné le répertoire que je voulais supprimer et cliqué Supprimer tout.

FastCopy delete dialog screenshot

FastCopy est portable (aucune installation requise) et des versions 32 bits et 64 bits sont disponibles.


29
2017-11-25 20:22



Si vous recherchez un outil en ligne de commande, vous pouvez utiliser un petit outil que j'ai publié sur GitHub (github.com/epsitec/Tools-RecursiveDelete). - Pierre Arnaud
J'avais un ensemble de fichiers / dossiers imbriqués générés de manière récursive. C'était la seule solution qui fonctionnait - Pierluigi
Cela a fonctionné pour moi lorsque la ligne de commande a échoué, la tentative de 7zip a échoué. et même le support de Microsoft était déconcerté! - Kit Ramos
Même chose ici - j'ai en quelque sorte commencé à supprimer des fichiers avec 7zip, mais il a aussi agi de manière très étrange et j'ai dû Shift + Delere chaque répertoire plusieurs fois pour le supprimer, mais j'ai essayé cet outil . L'a lancé deux fois pour se débarrasser de tous les fichiers. Merci! - Artanis
Merci, pour moi aussi la seule solution de travail, super !!!! - tim


Cygwin's rm -rf fonctionne bien sur les longs chemins!


24
2017-09-26 19:40



Cygwin a parfaitement travaillé pour moi! Juste un -rm -rf et tous les fichiers ont été supprimés. - Ranhiru Cooray
Travaillé pour moi aussi sous GNU bash, version 4.1.10 (4) -release - rjzii
Fonctionne très bien à partir d'une fenêtre de commande Git Bash. J'avais installé GitGui pour cela. - Albo Best


Sans installer de logiciel supplémentaire, vous pouvez utiliser subst commande pour créer temporairement un alias sur un long répertoire nommé.

par exemple. Si vous souhaitez supprimer le dossier C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted vous pouvez utiliser la commande

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

et puis vous pouvez supprimer X:\folder to be deleted dans l'Explorateur Windows ou dans l'invite de commande facilement. Pour supprimer la lettre de lecteur temporaire, utilisez la commande

subst x: /d

22
2017-10-28 06:09



J'ai essayé toutes les autres réponses (y compris les réponses à d'autres questions similaires) et c'était la seule qui fonctionnait pour moi. Et c'était de loin le plus rapide. - glenneroo
C'est de loin la meilleure réponse: des fonctionnalités simples et intégrées, pas de problème avec le registre. Devrait être la réponse acceptée. - Kevin Roche
Facilement la méthode la plus propre et la plus simple, merci Kenneth. - Seth


Il suffit de passer de Powershell à la commande en exécutant ci-dessous:

Cmd /C "rmdir /S /Q <dir>" 

21
2018-04-22 16:00



"Le répertoire n'est pas vide". Oops. L'OP veut supprimer un dossier non vide. - leye0