caractère spécial dans le nom de fichier (\ # 033OA)


10

J'ai un léger problème avec une erreur très tenace lors d'une rsync. Elle est causée par un fichier avec un caractère spécial dans son nom de fichier. Il y en a eu d'autres mais je pourrais régler ça en faisant une conversion dans l'encodage du nom de fichier. Cependant, ce fichier, je ne le trouve même pas.

Voici donc ce que rsync dit:

../.\#033OA.tex.pyD0MB" failed: No such file or directory (2)

La première chose que l'on remarque est que le code du personnage ne peut pas être hexadécimal ou octal, donc je l'ai googlé et je n'ai trouvé que cela . Il peut donc s'agir d'un CURSOR UPpersonnage (ou pas). J'ai essayé

ls -la *`printf '\033OA'`*

en vain. J'ai également essayé de canaliser la sortie de ls de ce répertoire en odvain.

Que puis-je faire d'autre? Ou quel personnage est-ce que je cherche de toute façon?

Merci


1
Essayez ls -b, qui devrait montrer des évasions de style C
enzotib

merci ... qui a aidé ... pourrait le déplacer avec l'aide de printf alors ... si vous republiez ce commentaire comme réponse, je l'accepterai avec plaisir :)
luxifer

Réponses:


9

Vous pouvez utiliser l' -boption to ls, qui affiche les caractères non graphiques sous forme de séquences d'échappement de style C.


1

ls -aqimprimera tous les noms de fichiers, avec un ?au lieu de chaque caractère non imprimable. Sur de nombreuses variantes Unix, ls -ABou ls -Ab(consultez votre page de manuel) imprimera des échappements octaux. Avec ls -aq, vous pouvez utiliser la sortie affichée comme modèle de coque.

$ ls -Aq
.?OA.tex.pyD0MB
… more stuff …
$ mv -i .?OA.tex.pyD0MB weird-file
$ less weird-file

Une autre façon d'obtenir le nom du fichier est d'utiliser la complétion de votre shell: entrez mv .et appuyez Tabplusieurs fois jusqu'à ce que le nom étrange soit inséré.


ls -qn'a pas montré le fichier alors qu'il l'a ls -bfait. peut-être parce que son nom de fichier n'était pas [weird-character]OA.texmais vraiment`printf %b '\033OA'`.tex
luxifer

@luxifer Il y a un .au début du nom du fichier, donc vous avez besoin de ls -Aqou ls -aq. Et si vous utilisez des caractères génériques shell, vous devez rendre .explicite: *n'inclura pas le fichier mais le .*fera.
Gilles 'SO- arrête d'être méchant'

non il n'y en avait pas! La sortie que j'ai publiée venait de rsync et c'était la fin de la ligne. Rsync copie d'abord $DESTINATION/.$FILENAMEavant de déplacer le fichier vers son nom correct. C'est pourquoi à la source le fichier n'avait pas .au début de son nom. En outre, comme indiqué, ls -qn'aurait pas montré le fichier alors qu'il l'a ls -bfait.
luxifer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.