¿Cómo cambiar el nombre del archivo a ... (punto punto)?

26

Aparentemente puede cambiar el nombre del archivo a... .

Si estuviera loco, ¿cómo cambiaría el nombre del archivo ..o .? ¿Se permite incluso ese nombre de archivo?

La barra invertida no parece deshabilitar el significado especial de dot:

$ mv test \.
mv: `test' and `./test' are the same file
gronostaj
fuente
11
.y ..ya existe Y punto no tiene un significado especial.
ctrl-alt-delor
2
Me pregunto si podría crear archivos con nombre .o ..desde Windows en medios externos FATo NTFSmedios, luego intente montarlos en un sistema basado en Unix. Hm ...
IQAndreas
3
@IQAndreas no, Windows usa. y ... casi de la misma manera ( superuser.com/a/571364/330318 ) que Unix. (Y muchos otros diablos de nombres especiales: superuser.com/a/217526/330318 )
PTwr
2
@PTwr La historia de Windows es más complicada que eso. Algunas cosas especiales suceden en el nivel del sistema de archivos / nivel de API de NT, algunas en el subsistema Win32 y otras en el nivel de shell. Por ejemplo, la magia GUID de su segundo enlace está en el nivel de shell, por lo que no los verá en una aplicación de línea de comandos típica. No estoy seguro de si existe .y ..realmente existe en NTFS y la API de NT o si solo son agregadas por la API de Win32. Sé que hay varias discrepancias entre la API de NT de nivel inferior y Win32, por ejemplo, Win32 oculta varios archivos de la raíz de la unidad.
CodesInChaos
@CodesInChaos, hasta donde yo sé, dot / dotdot son instancias virtuales y están emuladas en el controlador del sistema de archivos, y era lo mismo en la antigua FAT que tomó prestada ( problemática ) idea de Unix. Según el segundo enlace, admito que no lo leí completamente antes de publicarlo. Algo como este probablemente sería mejor. (pero de nuevo, este carece de información completa ./ ..)
PTwr

Respuestas:

25

.. no es especial, es solo que ya existe.

En Unix, Dos y MS-Windows, cada directorio tiene un directorio que .se vincula a sí mismo, y un directorio ..que vincula a su directorio padre (o self si es el directorio raíz).

Si ..y .son especiales es solo porque no puede eliminarlos (en realidad sí puede, simplemente elimine el directorio que los contiene).

Por lo tanto, no puede nombrar ningún (otro) archivo .o ...

Sin embargo, puede crear archivos ..., \, , .. (nota que hay un espacio después de la .., pero que difícilmente se puede ver aquí, o fácilmente en que el listado de directorios) o cualquier otro nombre que desee; El único carácter reservado es /(Advertencia: detalles avanzados: y nulo, nulo es un carácter especial, no se utiliza para nada excepto para marcar el final de las cosas y, a veces, como separador). .no tiene un significado especial: no tiene que archivar nombres, kernel o shell, no necesita escapar. En realidad, si un nombre de archivo comienza con un, .entonces es especial, el archivo normalmente está oculto, pero aún así no necesita escapar.

Aparte

Este comportamiento de archivo oculto se produjo en una implementación temprana de lsdónde quería ocultarse el autor .y .., por lo tanto, escribieron código para ocultar cualquier archivo que comience con a .. Otros usuarios notaron este error / característica y comenzaron a crear archivos a partir de .cuando querían que el archivo estuviera oculto.

Explicación de la pregunta vinculada

En la pregunta que vincula al interrogador, está tratando de mover el archivo al directorio principal ..pero termina renombrándolo ..., los archivos que comienzan con un punto están ocultos de forma predeterminada, es por eso que no pueden encontrarlo.

Cuando se usa mv en el formulario mv a b

  • Si te mueves a .él, efectivamente no es una operación, pero lo mvtrata como un error.
  • Si te mueves a ..él, moverá el archivo al directorio padre.
ctrl-alt-delor
fuente
1
¿Qué quieres decir con If you move to . it is effectively a no operation? No es un "no op", es un error si intenta mover un archivo de A a B cuando A y B son lo mismo. Una demostración más práctica de este error es mv foo ../some_dir/fooo mv foo some_subdir/../foo.
Brandin
77
Para alguna definición de 'carácter', NUL (0x00) también está restringido de uso en nombres de archivo y directorio.
user117529
1
La distinción entre el carácter reservado (es decir, /NUL) y el nombre reservado (es decir, .y ..) podría aclararse. También vale la pena señalar que .al comienzo del nombre tiene un significado especial solo en la capa de aplicación y no en el núcleo o la API de llamada del sistema.
kasperd
Creo que tu espacio se perdió.
nyuszika7h
1
..y . son especiales: no puedes moverlos ni eliminarlos. Pero no son especiales al mover archivos a ellos.
reinierpost
52

No puede cambiar el nombre de un archivo .ao ..porque todos los directorios ya contienen entradas para esos dos nombres. (Esas entradas apuntan a directorios, y no puede cambiar el nombre de un archivo a un directorio).

mv detecta el caso donde el destino es un directorio existente, y lo interpreta como una solicitud para mover el archivo a ese directorio (usando su nombre actual).

Las barras invertidas no tienen nada que ver con esto, porque .no es un metacarácter de shell. \.y .son los mismos a bash.

cjm
fuente
9

El problema es que está moviendo un archivo a un directorio. Esto está permitido fallar.

Te diré cómo fue una vez.

mkdir solía leer esto esencialmente (mientras escribo esto en sh, realmente estaba escrito en C y setuid-root).

mknod d $1
ln -d $1 $1/.
ln -d `dirname $1` $1/..

Como puede ver, no tiene mucho de especial. y ... excepto por el hecho de que son creados para usted por mkdir y ya existen. Ahora hay un código que dice que no puedes eliminarlos, pero no siempre fue así.

rmdir solía verse así:

rm -d $1/..
rm -d $1/.
rm -d $1
Joshua
fuente
+1 para la lección de historia y agregar algo que no está cubierto adecuadamente
ctrl-alt-delor