Одинаковое имя у файла и директории

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
SLV
Сообщения: 202
Статус: Возвращенец
ОС: Gentoo, OSX, Win7

Одинаковое имя у файла и директории

Сообщение SLV »

Всех приветствую. Вопрос из разряда основ: может ли в unix существовать и каталог, и файл с одним и тем же именем? Простой пример:
допустим, мы в домашнем каталоге.

Код: Выделить всё

mkdir dir

создали директорию dir. Теперь я хочу, чтобы у меня был простой файл с названием dir.
Если я введу:

для создания пустого файла, система выругается, сказав "can't create dir: Is a directory".
Или по-другому: создаю пустой файл f1 командой:

А потом хочу его переименовать (или скопировать под другим именем)
Пишу

Код: Выделить всё

cp f1 dir

и файл копируется в директорию dir.
Если написать вместо cp mv, файл переместится в директорию. Отсюда вопрос: почему нельзя? Они же типами отличаются как минимум. И второй вопрос: можно ли это обойти как-то?
Gentoo - это диагноз.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: Одинаковое имя у файла и директории

Сообщение /dev/random »

SLV писал(а):
08.03.2012 00:09
Отсюда вопрос: почему нельзя?

Каталог - это файл, содержащий таблицу соответствия между именами и номерами инодов. Не более. Как вы собираетесь обращаться к определённому файлу, если у нескольких файлов будет одно имя?

SLV писал(а):
08.03.2012 00:09
Они же типами отличаются как минимум.

К файлам обращаются не по типам, а по именам.

SLV писал(а):
08.03.2012 00:09
И второй вопрос: можно ли это обойти как-то?

Нет.
Спасибо сказали:
Аватара пользователя
Фантом
Сообщения: 460
ОС: openSUSE

Re: Одинаковое имя у файла и директории

Сообщение Фантом »

Как известно, в UNIX и его вариантах "все есть файл". Каталог, соответственно, тоже файл. Поэтому никаких "разных типов" тут нет, и обойти это невозможно.
Спасибо сказали:
Аватара пользователя
SLV
Сообщения: 202
Статус: Возвращенец
ОС: Gentoo, OSX, Win7

Re: Одинаковое имя у файла и директории

Сообщение SLV »

Ну лично я проблемы с обращением не видел. Ну то есть, например, надо скопировать файл в папку и мы четко пишем:

Код: Выделить всё

cp file dir/

надо скопировать файл в файл с другим именем - пишем:

Код: Выделить всё

cp file dir

И по аналогии для остальных операций. То есть ставим "/" когда работаем с директорией и не ставим, когда к файлу. Всем спасибо.
Gentoo - это диагноз.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Одинаковое имя у файла и директории

Сообщение sash-kan »

SLV писал(а):
08.03.2012 00:50
и мы четко пишем:
cp file dir/
зачем слэш?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Одинаковое имя у файла и директории

Сообщение watashiwa_daredeska »

sash-kan писал(а):
08.03.2012 03:40
зачем слэш?
Видимо, чтобы было понятно, что копируем в каталог dir, в отличие от копирования в файл dir.

SLV писал(а):
08.03.2012 00:50
Ну лично я проблемы с обращением не видел.
Видимо, Вы не обращались, потому и проблем не видели.

SLV писал(а):
08.03.2012 00:50
надо скопировать файл в папку и мы четко пишем:
Э-э-э нет. Это не обращение. Это высокоуровневая приблуда. На самом-то деле, "/" — спец. символ, который не участвует в различении файлов и каталогов.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Одинаковое имя у файла и директории

Сообщение sgfault »

SLV писал(а):
08.03.2012 00:50
Ну лично я проблемы с обращением не видел. Ну то есть, например, надо скопировать файл в папку и мы четко пишем:

Код: Выделить всё

cp file dir/

надо скопировать файл в файл с другим именем - пишем:

Код: Выделить всё

cp file dir

И по аналогии для остальных операций. То есть ставим "/" когда работаем с директорией и не ставим, когда к файлу. Всем спасибо.

Что касается cp, то вот (coreutils/cp):
If the --target-directory (-t) option is given, or failing that if the last file is a directory and the --no-target-directory (-T) option is not given, cp copies each source file to the specified directory, using the sources' names.

Те имеет значение не слеш, а тип target-а.

Upd На всякий случай: слеш имеет значение для source аргумента: coreutils/Trailing_slashes
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: Одинаковое имя у файла и директории

Сообщение t.t »

И главное -- почему такой вопрос возник, непонятно, а путаницу подобное поведение внесло бы невероятную. Кстати, в одном известном мне некогда проекте, где пользователям было удобно "одинаковое" именование файлов и каталогов, имена каталогов начинались с заглавной буквы, а файлов -- со строчной (это на случай, если "действительно надо").
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
alv
Бывший модератор
Сообщения: 7275
Статус: Пенсионер в законе
ОС: Cintu

Re: Одинаковое имя у файла и директории

Сообщение alv »

t.t писал(а):
09.03.2012 11:21
путаницу подобное поведение внесло бы невероятную.

теоретически обойти можно - если манипулировать одноимёнными ординарными файлами и каталогами не по именам, а по идентификаторам. Но уж путаницы тут точно было бы выше крыши. Да и спрашивается, а нафига вообще имена тогда нужны?
Так что уж лучше действительно, чтобы
t.t писал(а):
09.03.2012 11:21
имена каталогов начинались с заглавной буквы, а файлов -- со строчной (это на случай, если "действительно надо")

Спасибо сказали: