Renommer un fichier avec un nom étrange sur le support Samba

10

Je veux renommer un fichier avec un nom étrange en quelque chose de raisonnable, mais je ne suis pas en mesure de: /

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

J'ai essayé d'utiliser le numéro d'inode comme recommandé à quelques endroits sur Internet:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Que devrais-je faire?

Loup gris
la source
1
Quelle est la sortie d'un simple lsdans ce répertoire? Le fichier est-il affiché comme un fichier normal? Je demande à m'assurer qu'il No such file or directorys'agit d'une erreur de globalisation et non pas indicatif d'un système de fichiers endommagé.
terdon
1
Je me demande si le système de fichiers doit être exécuté fsck? Je suis peut-être corrompu. Comment le fichier a-t-il acquis ce nom?
Kusalananda
1
@Mioriin Les points d'interrogation dans le nom de fichier sont (ou pourraient bien être) des espaces réservés pour les caractères qui ne peuvent pas être affichés. (une raison pour ne jamais analyser la sortie de ls)
Kusalananda
1
Cela pourrait être un problème de police de terminal. Il montre ?pour les lettres qu'il ne peut pas afficher. Essayez de passer à une police entièrement unicode.
Mio Rin
5
@Mioriin Que le nom de fichier puisse ou non être affiché est un peu un hareng rouge dans ce cas je pense. Ce qui est étrange, c'est que le shell peut se développer *_000c.jpgmais qu'il mvne peut alors pas traiter le fichier. Ceci, à mon humble avis, indique un système de fichiers corrompu. ... ou peut-être d'un système de fichiers monté sur un partage réseau qui a disparu (avec les entrées du répertoire toujours en cache), ou quelque chose.
Kusalananda

Réponses:

16

Résumé des commentaires pertinents:

Les systèmes de fichiers Unix autorisent tout caractère dans un nom de fichier à l'exception de \0(nul) et /(barre oblique). Le fait d' lsafficher des points d'interrogation est uniquement dû au fait qu'il ne peut pas afficher certains des caractères du nom de fichier dans les paramètres régionaux actuels (ce qui est l'une des raisons pour lesquelles vous devez éviter d'analyser la sortie dels ).

Cependant, avec un partage Samba, vous avez apparemment des exigences plus strictes sur les noms de fichiers que sur un système de fichiers Unix standard.

Étant donné que le fichier avait un nom qui était "illégal" sur votre partage Samba intermédiaire, le fichier était inaccessible par son nom correct sur la machine qui monte le partage.

Cela mvn'a pas fonctionné car le nom renvoyé du partage Samba pour l'expansion du modèle de globalisation n'était pas le nom réel du fichier sur le système de fichiers hôte, seulement la propre version déformée de Samba du nom.

Votre solution était de vous connecter au serveur qui hébergeait réellement le fichier (sur un système de fichiers avec des règles de dénomination moins restrictives que Samba) et d'y changer le nom du fichier. C'était la bonne ligne de conduite.

Voir aussi le chat Unix et Linux sur cette question .

Kusalananda
la source
-2

Avant d'apprendre à citer des shells Unix, j'utilisais le diredmode emacs pour renommer ou supprimer des fichiers difficiles à faire correspondre. Vous ouvrez simplement le répertoire dans emacs:

emacs -q .

... vous pouvez ensuite utiliser les touches fléchées pour naviguer jusqu'au fichier que vous souhaitez modifier et renommer le fichier R. ?vous donnera la liste des commandes disponibles (vous pouvez également supprimer les fichiers difficiles à faire correspondre).

Ensuite, vous C-x C-csortez d'emacs et vous avez terminé.

Jim K.
la source
-3

Souvent, avec des noms de fichiers inhabituels, vous pouvez ajouter "./" avant que le nom de fichier et Linux ne le reconnaissent correctement. Par exemple: $ ls ./?j?Z?R?C1_000c.jpg

bootbeast
la source