为什么我不能有相同名称的文件夹和文件?


21

我以前从未遇到过此问题,但是由于某种原因,我无法将文件夹重命名为packages/

结构如下:

root
  -  packages_old/
  -  packages

当我尝试使用Thunar重命名文件夹时,收到一条错误消息,提示该文件已存在。与mv:相同

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

为什么我无法重命名我的文件和文件夹以使用相同的名称:

root
  -  packages/
  -  packages

发誓我以前做过。


19
您的记忆可能并不像您想象的那么简单。在UNIX平台上,“一切都是文件”。您不能使用相同名称的文件和文件夹,因为目录只是一种特殊的文件。它与中.d目录的传统扩展名有关/etc。假设您做过ls packagesvim packages-系统将如何知道您是否想要目录或文件?
jw013 2011年

2
您能否告诉我们您使用的是什么操作系统?因为你不能有一个文件和目录对大多数操作系统相同的名字,我知道
rahmu

2
@ j013,您为什么在评论中回答却未写答案
andcoz 2011年

1
您也无法在Windows上执行此操作。在我的Windows 7计算机上,尝试这样做会产生以下错误:There is already a file with the same name as the folder name you specified. Specify a different name.
克里斯·

4
在Windows中,默认设置是忽略扩展名,因此您可以在同一文件夹中拥有package目录和package.txt文件。从Windows资源管理器中,您似乎必须输入名为“ package”的条目,而实际上,它只是隐藏文件名之一。
Arcege 2011年

Answers:


35

在Unix中,几乎所有内容都是文件。目录是一种特殊类型的文件,从用户的角度来看,它可以“包含”其他文件。

Not a directory发生错误是因为现有文件不是目录,并且目录是文件的类型,并且一个目录中不能有两个同名文件,所以无法执行该操作。


6
至于您的内存问题,也许过去您的文件和目录具有相同的名称,但大小写不同,例如“ package”和“ Package”。文件名区分大小写,因此可以使用。
noamtm 2011年

2

因为如果您能够做到这一点,当我尝试对目录中的文件进行迭代时,像我这样的程序员的生活将会很痛苦。

对于以下伪代码:

isDir('/path/to/same_file_and_folder_name')

操作系统应该回答是还是否?


它应该只返回“ both”。
Anthon


1
@ G-Man类型布尔值,已得到对象(承诺)。
杨致远
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.