Quiero cambiar el nombre del archivo con un nombre extraño a algo razonable, sin embargo 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 recomendó en algunos lugares en 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?
ls
en ese directorio? ¿El archivo se muestra como un archivo normal? Estoy pidiendo asegurarme de que seNo such file or directory
trata de un error global y no es indicativo de un sistema de archivos dañado.fsck
. Puedo estar corrompido. ¿Cómo adquirió el archivo ese nombre?ls
)?
para letras que no puede mostrar. Intente cambiar a una fuente totalmente unicode.*_000c.jpg
pero esomv
no puede procesar el archivo. Esto es, en mi humilde opinión, indicativo de un sistema de archivos corrupto. ... o posiblemente de un sistema de archivos que está montado en un recurso compartido de red que ha desaparecido (con las entradas del directorio todavía en caché), o algo así.Respuestas:
Resumen de comentarios relevantes:
Los sistemas de archivos Unix permiten cualquier carácter en un nombre de archivo aparte de
\0
(nul) y/
(barra diagonal). El hecho de quels
muestre signos de interrogación es solo porque no puede mostrar algunos de los caracteres del nombre de archivo en la configuración regional actual (que es una de las razones por las que debe evitar analizar la salida dels
).Sin embargo, con un recurso compartido de Samba, aparentemente tiene requisitos más estrictos en 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, el archivo era inaccesible por su nombre correcto en la máquina que montaba el recurso compartido.
El
mv
no funcionó ya que el nombre de regresar de la cuota de Samba para la expansión del patrón de englobamiento no era el nombre real del archivo en el sistema de archivos de alojamiento, sólo la propia versión mutilada de Samba del nombre.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.
Vea también el chat de Unix y Linux sobre esta pregunta .
fuente
Antes de aprender sobre las citas en shells de Unix, usaba el
dired
modo emacs para renombrar o eliminar archivos difíciles de igualar. Simplemente abra el directorio en emacs:... luego puede usar las teclas de flecha para navegar al archivo que desea modificar y cambiar el nombre del archivo
R
.?
le dará la lista de comandos disponibles (también puede eliminar archivos que son difíciles de igualar).Entonces
C-x C-c
saliste de emacs y listo.fuente
A menudo, con nombres de archivo inusuales, puede agregar "./" antes del nombre de archivo y Linux lo reconocerá correctamente. Por ejemplo: $ ls ./?j?Z?R?C1_000c.jpg
fuente