Quiero cambiar el nombre del archivo con un nombre extraño a algo razonable, pero no puedo :/
$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory
Intenté usar el número de inodo como se recomienda en algunos lugares de 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
¿Qué tengo que hacer?
Respuesta1
Resumen de comentarios relevantes:
Los sistemas de archivos Unix permiten cualquier carácter en el nombre de un archivo además de \0
(nul) y /
(barra diagonal). El hecho de que ls
muestre signos de interrogación se debe únicamente a que no puede mostrar algunos de los caracteres del nombre del archivo en la configuración regional actual (que es una de las razones por las quedebes evitar analizar la salida dels
).
Sin embargo, con un recurso compartido Samba, aparentemente tiene requisitos más estrictos sobre los nombres de archivos que en un sistema de archivos Unix estándar.
Dado que el archivo tenía un nombre que era "ilegal" en su recurso compartido Samba intermedio, no se podía acceder al archivo con su nombre correcto en la máquina que montaba el recurso compartido.
No mv
funcionó ya que el nombre devuelto por el recurso compartido de Samba para la expansión del patrón global no era el nombre real del archivo en el sistema de archivos de alojamiento, solo la versión destrozada del nombre por parte de Samba.
Su solución fue iniciar sesión en el servidor que realmente alojaba el archivo (en un sistema de archivos con reglas de nomenclatura menos restrictivas que Samba) y cambiar el nombre del archivo allí. Este fue el curso de acción correcto.
Consulte también Unix y Linux.charla sobre esta pregunta.
Respuesta2
Antes de aprender a citar en shells de Unix, usaba dired
el modo de emacs para cambiar el nombre o eliminar archivos difíciles de encontrar. Simplemente abre el directorio en emacs:
emacs -q .
... luego puede usar las teclas de flecha para navegar hasta el archivo que desea modificar y cambiarle el nombre R
. ?
le dará la lista de comandos disponibles (también puede eliminar archivos que son difíciles de igualar).
Luego simplemente C-x C-c
sales de emacs y listo.
Respuesta3
A menudo, con nombres de archivos inusuales, puede agregar "./" antes del nombre del archivo y Linux lo reconocerá correctamente. Por ejemplo: $ ls ./?j?Z?R?C1_000c.jpg