2 votes

Impossible de supprimer les répertoires vides avec des noms étranges

Je traverse une période difficile en essayant de supprimer trois répertoires vides qui ont été créés après un processus avorté de "nettoyage de l'espace disque libre" de bleachbit, j'ai essayé toutes les méthodes suggérées et aucune ne semble fonctionner. J'ai essayé de les détruire avec bleachbit et de les supprimer en utilisant des commandes comme rm -d, rm -f, rm -r, j'ai essayé de les renommer, de les déplacer, j'ai même remplacé Ubuntu 16.04 par 17.04 au cas où ce qui ne va pas pourrait être corrigé, mais ils sont toujours là.

Les répertoires sont dans une partition séparée et non dans le répertoire personnel. Leurs noms sont les suivants :

  1. -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
  2. CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC
  3. qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9

Chaque fois que j'essaie quelque chose, je reçois ce message qui dit :

Fichier ou répertoire introuvable

Voici une partie de la sortie :

me@MyPC:~$ rm -f /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR

me@MyPC:~$ rmdir -- $ 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove '$': Fichier ou répertoire introuvable
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': Fichier ou répertoire introuvable

me@MyPC:~$ rmdir -- 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': Fichier ou répertoire introuvable

me@MyPC:~$ rmdir 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': Fichier ou répertoire introuvable

me@MyPC:~$ rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': Fichier ou répertoire introuvable

me@MyPC:~$ sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': Fichier ou répertoire introuvable

me@MyPC:/media/me/702E29F142F2362F$ rmdir -- $'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9'
rmdir: failed to remove 'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9': Fichier ou répertoire introuvable

Quand j'essaie de les déplacer vers la corbeille ou de les supprimer en utilisant Nautilus, ça ressemble à ceci :

Nautilus montrant une erreur similaire de 'Fichier ou répertoire introuvable'

5voto

Eliah Kagan Points 111731

Certains de vos noms commencent par -, donc passez d'abord -- ou utilisez un chemin absolu.

Pour les répertoires vides, utilisez la commande rmdir et écrivez -- comme un mot séparé avant le nom du premier répertoire à supprimer. Si -- n'a pas été passé (ce qui s'applique également aux commandes que vous avez essayées ainsi qu'à rmdir), alors les mots commençant par - seront interprétés comme des collections d'options contrôlant le comportement de la commande plutôt que comme des noms de fichiers sur lesquels la commande doit agir.

Vous devrez écrire vos commandes en fonction des noms de répertoires que vous avez. En raison d'erreurs possibles dans la mise en forme des noms de fichiers dans l'éditeur visuel de Stack Exchange, c'est un cas où je ne recommande pas de copier directement depuis cette réponse. Cependant, voici un exemple que je vous invite à modifier selon vos besoins, si vous avez un répertoire nommé :

-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR

Et s'il est vide, et que vous êtes dans son répertoire parent (vous pouvez utiliser cd pour y aller et pwd pour vérifier dans quel répertoire vous vous trouvez actuellement), alors vous pouvez le supprimer de cette manière :

rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR

Ou, s'il est détenu par root ou que vous n'avez pas les permissions pour le supprimer :

sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR

Remarquez qu'il y a un espace après l'argument --. C'est important.

Ou vous pouvez utiliser le chemin complet du répertoire. Ensuite, vous n'avez pas à vous soucier du répertoire dans lequel vous vous trouvez lorsque vous exécutez la commande et le -- est facultatif. Par exemple (basé sur ce que vous avez montré dans un commentaire) :

rmdir /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR

(Ou avec sudo rmdir, comme ci-dessus.)

Certains noms peuvent contenir des caractères nécessitant des guillemets.

Si cela ne vous aide pas et que vous continuez à rencontrer le même message Aucun fichier ou répertoire de ce type, alors le problème est que vous ne nommez pas correctement les répertoires. Apparemment, leurs noms contiennent des caractères inhabituels.

Il n'est pas évident que ce soit le cas compte tenu de ce que vous avez montré, mais c'est un problème courant donc je le mentionne au cas où. Si les noms de vos répertoires contiennent des espaces ou d'autres caractères traités spécialement par le shell comme les sauts de ligne, * ou $, alors vous devriez les encapsuler entre des guillemets simples. Cela sera suffisant tant que les noms eux-mêmes ne contiennent pas de guillemets simples.

Plus généralement, si vous avez utilisé cd pour vous rendre dans le répertoire qui contient ces répertoires, vous devriez pouvoir obtenir une liste des entrées dans ce répertoire (y compris les sous-répertoires que vous souhaitez supprimer) en exécutant :

ls -1b

Cela diffère d'une commande ls ordinaire de deux façons utiles :

  • Le drapeau -b fait en sorte que les chemins soient imprimés avec des séquences d'échappement qui peuvent être collées entre $' '. Aucun espace ne doit apparaître entre le $ initial et le caractère d'ouverture '.
  • Le drapeau -1 fait en sorte que ls liste une entrée par ligne. Cela peut aider à réduire la confusion sur la fin d'un nom de fichier et le début du suivant.

Cela devrait vous permettre de rédiger des commandes qui suppriment, renomment, etc. ces répertoires. S'ils sont vraiment vides, vous pourrez ensuite utiliser la commande rmdir pour les supprimer. Vous devrez peut-être exécuter cette commande en tant que root, ce que vous pouvez faire avec sudo.

Voici une illustration délibérément simplifiée des commandes que vous pourriez exécuter. Supposons que ls -1b ait listé :

abc\ def
ghi\njkl
pqr\b\b\bstuv
$$$$$$$\b\b\b$$$

Dans le premier cas, il y a un espace. Dans le deuxième cas, il y a un saut de ligne. Dans le troisième cas, il y a trois caractères de retour en arrière. Dans le quatrième cas, il y a à la fois des caractères $ et de retour en arrière.

Pour supprimer ces répertoires, vous pourriez utiliser :

rmdir -- $'abc\ def'
rmdir -- $'ghi\njkl'
rmdir -- $'pqr\b\b\bstuv'
rmdir -- $'$$$$$$$\b\b\b$$$'

Comme précédemment, vous pourriez avoir besoin de sudo.

rmdir peut prendre plusieurs noms de fichiers, mais si vous utilisez une commande par suppression, il peut être plus facile de comprendre les messages d'erreur que vous recevez, le cas échéant.

Dans ces exemples particuliers, les noms de répertoires ne commençaient pas par - et le drapeau -- n'était pas nécessaire. Mais cela n'a pas fait de mal.

$' ' versus simple ' '

Contrairement à l'utilisation de guillemets simples ' ', l'utilisation de guillemets $' ' provoque l'expansion d'échappements en barre oblique comme \n et \b.

'ghi\njkl' identifie un fichier dont le nom est littéralement :

  • ghi\njkl

En revanche, $'ghi\njkl' identifie un fichier dont le nom est :

  • ghi jkl

Si vous utilisez un navigateur de fichiers graphique, vous pouvez peut-être le faire glisser dedans.

Avec certains navigateurs de fichiers graphiques (comme Nautilus, c'est-à-dire "Files") et certains terminaux (comme GNOME Terminal), il existe un moyen encore plus facile d'obtenir un chemin absolu utilisable vers un fichier dans une commande de terminal que vous rédigez.

Cela fonctionnera sur la plupart des systèmes Ubuntu qui ont une interface graphique installée, mais cela ne fonctionnera pratiquement jamais lorsque vous vous connectez à distance via SSH.

Vous pouvez glisser le dossier depuis la fenêtre du navigateur de fichiers dans la fenêtre du terminal pour coller le chemin complet jusqu'à lui dans le terminal. Avec votre souris sur la fenêtre du terminal, relâchez le bouton.

Pour que cela soit utile, la meilleure approche est d'écrire la commande que vous souhaitez exécuter en premier. Par exemple, écrivez ceci et incluez un espace à la fin mais ne pressez pas Enter encore :

rmdir --

Ensuite, faites glisser le dossier depuis la fenêtre du navigateur de fichiers dans la fenêtre du terminal. Si votre navigateur de fichiers et votre émulateur de terminal le supportent, vous devriez voir un chemin collé, avec un formatage automatique en barre oblique ou guillemets fourni. Vous pourrez ensuite presser Enter pour exécuter la commande. Même si la commande ne réussit pas, cela donnera généralement un message d'erreur plus utile que Aucun fichier ou répertoire de ce type.

2voto

WinEunuuchs2Unix Points 91128

Méthode graphique

J'utiliserais nautilus, le gestionnaire de fichiers intégré à Ubuntu. Il suffit de mettre en surbrillance les répertoires, de faire un clic droit et de sélectionner "envoyer à la corbeille". Si les répertoires contiennent de gros fichiers, vous voudrez peut-être vider la corbeille immédiatement.

Si les répertoires sont possédés par root, Nautilus ne vous permettra pas de les supprimer. Dans ce cas, ouvrez un terminal et utilisez :

gksu nautilus

Impossible de mettre à la corbeille mais possible de supprimer directement

Conformément à cette question sur Linux Mint, certains fichiers Windows ne peuvent pas être déplacés vers la corbeille mais peuvent être supprimés directement.

Une autre réponse dans ce fil de discussion indique comment trouver le type de système de fichiers en utilisant :

df -T /media/

Ensuite, la modification de l'entrée /etc/fstab a fonctionné pour le montage en utilisant des paramètres différents et en supprimant avec succès les fichiers.


Méthode du terminal

Comme le mentionne cette question et réponse de Super User, vous pouvez supprimer des fichiers avec des caractères spéciaux (noms bizarres) en accédant au répertoire les contenant et en utilisant :

rm -i -- *

Cela vous invitera à supprimer chaque fichier. Vous pouvez et devez remplacer '*' par une correspondance plus étroite s'il y a beaucoup de fichiers. Le -- arrête le traitement des options, donc un fichier nommé -d sera supprimé avec succès par rm.

Une autre réponse dans le même fil de discussion propose de supprimer par numéro d'inode en utilisant. Elle indique que vous pouvez utiliser ls -li pour afficher tous les fichiers par leur inode. Ensuite, exécutez cette commande pour supprimer le fichier :

find . -inum ${NUMERO_D_INODE} -delete

Vous pouvez ajouter -maxdepth 1 à ma commande find juste pour être sûr :

find . -maxdepth 1 -inum ${NUMERO_D_INODE} -delete

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X