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?
ls
dans ce répertoire? Le fichier est-il affiché comme un fichier normal? Je demande à m'assurer qu'ilNo such file or directory
s'agit d'une erreur de globalisation et non pas indicatif d'un système de fichiers endommagé.fsck
? Je suis peut-être corrompu. Comment le fichier a-t-il acquis ce nom?ls
)?
pour les lettres qu'il ne peut pas afficher. Essayez de passer à une police entièrement unicode.*_000c.jpg
mais qu'ilmv
ne 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.Réponses:
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'ls
afficher 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
mv
n'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 .
la source
Avant d'apprendre à citer des shells Unix, j'utilisais le
dired
mode emacs pour renommer ou supprimer des fichiers difficiles à faire correspondre. Vous ouvrez simplement le répertoire dans emacs:... 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-c
sortez d'emacs et vous avez terminé.la source
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
la source