3

Я отмечаю странное поведение mv/cp в Linux. Каталоги А и А /. должны быть эквивалентны, но в качестве аргументов для источника они, похоже, ведут себя по-разному. Это ошибка? Конечно, вы можете спросить, почему я должен использовать A /. вместо A в качестве источника, но иногда хочется "." как источник и происходят такие же странные вещи ... Может кто знает ответ.

Давайте начнем с

$ mkdir A A/A1 B

и сейчас

вариант 1)

$ cp -r A B
$ ls B
A

Отлично.

вариант 2)

$ cp -r A/. B
$ ls B
A1

Почему "А1", а не "А"?

вариант 3)

$ mv A B
$ ls B
A

Отлично.

вариант 4)

$ mv -i A/. B
mv: overwrite `B/.'? y
mv: cannot move `A/.' to `B/.': Device or resource busy

странный...

1 ответ1

2

"А" и «А /.» обе записи каталога указывают на одно и то же, но сами по себе они разные. "A" - это запись в текущем каталоге, а «A /». это запись с именем "." в каталоге А. Думайте об этом как о воздействии на коробку снаружи, а не на коробку изнутри.

В частности,

cp -r AB

Копирует А в Б.

cp -r A/. В

Заходит в каталог A и копирует содержимое текущего каталога (т.е./ А1) в Б.

М.В. AB

Перемещает запись каталога с именем "A" из текущего каталога в B.

MV -I A/. В

Пытается переместить запись каталога "." из А в Б. Тем не менее, уже есть запись с именем "." в Б. В общем, вы не можете двигаться "." (это все равно что пытаться переместить коробку изнутри).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .