¿Por qué no puedo tener una carpeta y un archivo con el mismo nombre?

21

Nunca he tenido este problema antes, pero por alguna razón, no puedo cambiar el nombre de mi carpeta packages/.

Esta es la estructura:

root
  -  packages_old/
  -  packages

Cuando intento cambiar el nombre de la carpeta con Thunar, recibo un mensaje de error que dice que el archivo ya existe. Lo mismo con mv:

blender iso $ mv packages_old/ packages/
mv: accessing `packages/': Not a directory

¿Por qué no puedo cambiar el nombre de mi archivo y carpeta para tener el mismo nombre:

root
  -  packages/
  -  packages

Yo juro que he hecho esto antes.

Licuadora
fuente
19
Tu memoria probablemente no sea tan infalible como crees que es. En la plataforma unix "todo es un archivo". No puede tener un archivo y una carpeta con el mismo nombre porque los directorios son solo un tipo especial de archivo. Está relacionado con las .dextensiones tradicionales en directorios en /etc. Supongamos que sí ls packageso vim packages, ¿cómo sabría el sistema si desea el directorio o el archivo?
jw013
2
¿Podrías decirnos qué sistema operativo estás usando? Debido a que no puede tener un archivo y un directorio con el mismo nombre en la mayoría de los sistemas operativos que conozco
rahmu
2
@ j013, ¿por qué has respondido en un comentario y no has escrito una respuesta ?
andcoz
1
Tampoco puedes hacerlo en Windows. En mi máquina con Windows 7, intentar hacerlo produce el error:There is already a file with the same name as the folder name you specified. Specify a different name.
Chris Down
44
En Windows, la configuración predeterminada es ignorar las extensiones, por lo que podría tener un packagedirectorio y un package.txtarchivo en la misma carpeta. Desde el Explorador de Windows, parecerá que tiene que ingresar entradas llamadas "paquete", cuando en realidad solo está ocultando parte del nombre de archivo de uno.
Arcege

Respuestas:

35

En Unix, casi todo es un archivo. Un directorio es un tipo especial de archivo que desde la perspectiva del usuario puede "contener" otros archivos.

El error se Not a directoryproduce porque su archivo existente no es un directorio, y dado que un directorio es un tipo de archivo, y no puede haber dos archivos con nombres idénticos en un directorio, la operación no se puede realizar.

Chris Down
fuente
66
En cuanto a su problema de memoria, tal vez en el pasado su archivo y directorio tenían el mismo nombre pero con un caso diferente, como "paquete" y "Paquete". Los nombres de archivo distinguen entre mayúsculas y minúsculas, por lo que funcionaría.
noamtm
2

Porque si pudieras hacer algo así, la vida sería miserable para los programadores como yo cuando trato de iterar archivos en un directorio.

Para el siguiente pseudocódigo:

isDir('/path/to/same_file_and_folder_name')

¿Debería el sistema operativo responder verdadero o falso?

Scott Yang
fuente
Debería devolver 'ambos'.
Anthon
3
isAlive (" El gato de Schrödinger ") :-)
G-Man dice 'Reinstate Monica' el
1
@ G-Man Tipo booleano esperado, objeto obtenido (promesa).
Scott Yang