Étant donné que les caractères sont probablement des caractères internationaux, ils apparaissent probablement comme des codes de contrôle dans votre jeu de caractères en_US, c'est pourquoi ls les affiche comme des points d'interrogation.
Cela peut être dû au choix par défaut de votre distribution des alias ls dans le profil global. Par exemple:
alias ls='ls -q'
Vous pouvez voir si votre distribution l'a fait en tapant dans votre shell:
alias ls
Qui imprimera quelque chose comme ceci:
$ alias ls
alias ls='ls --color=auto'
La page liée ci-dessous suggère que si vous faites "ls -b", vous verrez les codes de contrôle octaux afin que vous sachiez au moins quels caractères sont utilisés.
http://www.arsc.edu/arsc/support/howtos/nonprintingchars/
En supposant que cela ne fonctionne pas, vous avez également une autre option mentionnée plus près du bas:
Un outil que je ne connaissais pas jusqu'à présent appelé OctalDump (sur Debian - / usr / bin / od)
$ ls | od -b
Vous montrera la forme octale des codes de contrôle.
$ ls | od -c
Vous montrera les personnages, y compris tous les espaces supplémentaires cachés qui pourraient être à la fin (notez les espaces supplémentaires à la fin dans leur exemple)
Une fois que vous savez quels personnages de contrôle sont en jeu et s'il y a des espaces cachés supplémentaires, vous pouvez trouver un moyen de passer au CD dans le répertoire en échappant aux personnages de contrôle. A défaut, vous avez deux options pour renommer le répertoire.
La page ci-dessus a également, de manière pratique, une méthode rapide et sale pour supprimer les caractères de contrôle via la commande mv, qui je pense fonctionnera, tant que vous échappez à l'espace, mais n'échappez PAS aux points d'interrogation (ce qui en fait des caractères uniques caractères génériques), et tant qu'il n'y a rien d'autre dans le répertoire où se trouve ce répertoire escroc. La raison de ces exigences explicites est que vous n'utilisez que des caractères génériques et l'espace unique et que vous ne souhaitez donc pas que le caractère générique corresponde par inadvertance à un autre fichier ou répertoire.
Si la méthode ci-dessus ne fonctionne pas, vous pouvez presque certainement utiliser la méthode de recherche mentionnée par d'autres réponses, d'une manière différente. Plutôt que d'essayer de cd dans le répertoire en utilisant le numéro d'inode, ce que vous avez dit avoir essayé, vous pouvez le renommer en utilisant le numéro d'inode. Assurez-vous simplement de copier l'ensemble complet de 3 lignes pour cette commande à partir de la page ci-dessus (remplacez la partie "nom-désiré" par le nom réel que vous voulez renommer cependant).
Une fois le répertoire renommé, vous devriez pouvoir y accéder. Je peux seulement espérer qu'il ne contient pas également de fichiers avec des codes de contrôle dans les noms, ou vous devrez rincer et répéter pour chaque fichier (et / ou sous-répertoire) dans le répertoire que vous venez de renommer, auquel cas une boucle for serait il serait probablement judicieux de simplement nommer chaque fichier en nombre, en incrémentant à partir de 1. :-)
cd */
pourrait alors fonctionner.*
devrait développer une description compréhensible du répertoire du shell etcd
ignore les arguments supplémentaires. Une autre façon pourrait être d'utiliser un gestionnaire de fichiers graphique (y compris le MC basé sur le terminal) ou les navigateurs d'arborescence de fichiers intégrés, par exemple dans Vim. Vous pouvez également expérimenter le-exec
passage àfind, not with
cd` directement (qui est un shell intégré) mais avec par exemplels
et d'autres outils.