web-dev-qa-db-fra.com

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 créés après un processus d'abandon de "nettoyage de l'espace disque libre" de bleachbit, j'ai utilisé toutes les méthodes suggérées et aucune ne semble fonctionner, j'ai essayé de les déchiqueter avec bleachbit et 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 risque de corriger ce qui ne va pas. êtes toujours là.

Les répertoires sont dans une partition séparée et non dans le répertoire de base. 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:

Aucun fichier ou répertoire de ce nom

voici quelques-uns des résultats:

me@MyPC:~$ rm -f /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

me@MyPC:~$ rmdir -- $ 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove '$': No such file or directory
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir -- 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': No such file or directory

me@MyPC:~$ Sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': No such file or directory



me@MyPC:/media/me/702E29F142F2362F$ rmdir -- $'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9'
rmdir: failed to remove 'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9': No such file or directory

Lorsque j'essaie de le déplacer vers la corbeille ou de le supprimer à l'aide de Nautilus , il se présente comme suit:

Nautilus showing a similar "No such file or directory" error

2
AliOuld

Certains de vos noms commencent par _-_, passez donc _--_ en premier ou utilisez un chemin absolu.

Pour les répertoires vides, utilisez la commande rmdir et écrivez _--_ en tant que mot distinct avant le nom du premier répertoire à supprimer. Si _--_ n'a pas été passé (ceci s'applique aux commandes que vous avez essayées ainsi que rmdir), les mots commençant par _-_ seront interprétés comme des ensembles d'options contrôlant le déroulement de la commande. se comporte plutôt que comme des noms de fichiers pour que la commande puisse être exécutée.

Vous devrez écrire vos commandes en fonction des noms de répertoires que vous avez. En raison de possibles erreurs de formatage des noms de fichiers dans l'éditeur visuel Stack Exchange, il est dans ce cas que je ne recommande pas de copier directement à partir de cette réponse. Cependant, à titre d’exemple que j’attends de vous modifier au besoin, si vous avez un répertoire dont le nom est:

_-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR
_

Et il est vide, et 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), puis vous pouvez le supprimer comme ceci:

_rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR
_

Ou, s'il appartient à root ou si vous n'avez pas l'autorisation de le supprimer:

_Sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR
_

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

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

_rmdir /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR
_

(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 à recevoir le même message Aucun fichier ou répertoire de ce type, le problème est que vous ne nommez pas les répertoires avec succès. Vraisemblablement, leurs noms contiennent des caractères inhabituels.

Il n’est pas évident que ce soit le cas sur la base de ce que vous avez montré, mais c’est un problème courant, aussi je l’inclus au cas où. Si vos noms de répertoire contiennent des espaces ou d’autres caractères traités spécialement par le shell, tels que des sauts de ligne, _*_ ou _$_, vous devez placer les noms entre 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 accéder au répertoire qui contient ces répertoires, vous devriez pouvoir obtenir une liste des entrées de 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 manières utiles:

  • L'indicateur _-b_ provoque l'impression des chemins avec des séquences d'échappement pouvant être collées entre _$'_ _'_. Aucun espace ne doit apparaître entre le caractère initial _$_ et le caractère _'_ initial.
  • L'indicateur _-1_ permet à ls de répertorier une entrée par ligne. Cela peut aider à réduire la confusion sur l'endroit où un nom de fichier se termine et l'autre commence.

Cela devrait vous permettre d'écrire des commandes pour supprimer, renommer, etc. ces répertoires. S'ils sont vraiment vides, vous pouvez alors 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 simpliste des commandes que vous pouvez exécuter. Supposed _ls -1b_ listé:

_abc\ def
ghi\njkl
pqr\b\b\bstuv
$$$$$$$\b\b\b$$$
_

Dans le premier cas, il y a un espace. Dans le second cas, il y a une nouvelle ligne (un saut de ligne). Dans le troisième cas, il y a trois caractères de retour arrière. Dans le quatrième cas, il y a à la fois _$_ et des caractères de retour arrière.

Pour supprimer ces répertoires, vous pouvez utiliser:

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

Comme ci-dessus, vous aurez peut-être 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épertoire ne commençaient pas par _-_ et l'indicateur _--_ n'était pas nécessaire. Mais cela n'a fait aucun mal.

_$'_ _'_ versus brut _'_ _'_

Contrairement aux citations avec _'_ _'_, les citations avec _$'_ _'_ entraînent des échappements de barres obliques inverses telles que _\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 pourrez peut-être y faire glisser le curseur.

Certains navigateurs de fichiers graphiques (tels que Nautilus, "Fichiers") et certains terminaux (tels que GNOME Terminal) offrent une méthode encore plus simple pour obtenir un chemin absolu utilisable vers un fichier dans une commande de terminal que vous écrivez.

Cela fonctionnera sur la plupart des systèmes Ubuntu dotés d'une interface utilisateur graphique, mais cela ne fonctionnera pratiquement jamais si vous vous connectez à distance via SSH.

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

Pour que cela soit utile, la meilleure approche consiste à écrire la commande que vous voulez exécuter en premier. Par exemple, écrivez ceci et insérez un espace à la fin mais n'appuyez pas sur Enter encore:

_rmdir --
_

Faites ensuite glisser le dossier de la fenêtre du navigateur de fichiers dans la fenêtre du terminal. Si votre navigateur de fichiers et votre émulateur de terminal le prennent en charge, vous devez voir un chemin collé, avec des guillemets _\_ ou _'_ fournis automatiquement. Vous pouvez ensuite appuyer sur Enter pour exécuter la commande. Même si la commande n'aboutit pas, cela donnera généralement un message d'erreur plus utile que Aucun fichier ou répertoire de ce type.

5
Eliah Kagan

Méthode graphique

J'utiliserais nautilus le gestionnaire de fichiers intégré à Ubuntu. Sélectionnez simplement les répertoires, cliquez avec le bouton droit de la souris et sélectionnez "Envoyer à la corbeille". Si les répertoires contiennent des fichiers volumineux, vous voudrez peut-être vider immédiatement la corbeille.

Si les répertoires appartiennent à la racine, Nautilus ne vous laissera pas les supprimer. Dans ce cas, ouvrez un terminal et utilisez:

gksu nautilus

Ne peut pas déplacer à la corbeille mais peut supprimer directement

Selon cette question de 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 cette discussion explique comment trouver le type de système de fichiers en utilisant:

df -T /media/<path_to_project_folder>

Changer ensuite l'entrée /etc/fstab fonctionnait pour un montage utilisant différents paramètres et pour supprimer les fichiers avec succès.


Méthode de terminal

Selon ce Q & A Super User vous pouvez supprimer les fichiers avec des caractères spéciaux (noms étranges) en changeant le répertoire qui les contient 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, ainsi un fichier nommé -d sera supprimé par rm avec succès.

Une autre réponse dans le même fil propose de supprimer par numéro d'inode en utilisant. Il dit 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 ${INODE_NUM} -delete

Vous pouvez ajouter -maxdepth 1 à ma découverte pour plus de sécurité:

find . -maxdepth 1 -inum ${INODE_NUM} -delete
2
WinEunuuchs2Unix