Почему я не могу иметь папку и файл с одинаковым именем?

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 packagesили vim packages- как бы система узнала, хотите ли вы каталог или файл?
jw013
2
Не могли бы вы рассказать нам, какую ОС вы используете? Потому что у вас не может быть файла и каталога с одинаковыми именами на большинстве известных мне ОС
rahmu
2
@ j013, почему ты ответил в комментарии и не написал ответ ?
andcoz
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 будет казаться, что у вас есть записи, называемые «пакет», хотя на самом деле он просто скрывает часть имени файла.
Arcege

Ответы:

35

В Unix почти все это файл. Каталог - это особый тип файла, который с точки зрения пользователя может «содержать» другие файлы.

Ошибка Not a directoryвозникает из-за того, что существующий файл не является каталогом, а каталог является типом файла, и в одном каталоге не может быть двух файлов с одинаковыми именами, операция не может быть выполнена.

Крис Даун
источник
6
Что касается вашей проблемы с памятью, возможно, в прошлом ваш файл и каталог имели одно и то же имя, но с разными регистрами, такими как «пакет» и «пакет». Имена файлов чувствительны к регистру, так что это будет работать.
noamtm
2

Потому что, если бы вы смогли сделать такую ​​вещь, жизнь программистов, подобных мне, была бы несчастной, когда я попытался бы перебирать файлы в каталоге.

Для следующего псевдокода:

isDir('/path/to/same_file_and_folder_name')

Должна ли ОС отвечать истиной или ложью?

Скотт Ян
источник
Он должен просто вернуть «оба».
Anthon
3
isAlive (« Кот Шредингера ») :-)
G-Man говорит: «Восстановите Монику»
1
@ G-Man Тип логический ожидаемый, получил объект (обещание).
Скотт Ян