Почему свободное место на исходном разделе не меняется во время «mv»?

13

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

Почему это работает таким образом, вместо того, чтобы сумма размеров свободного пространства исходного и целевого разделов оставалась неизменной?

Тим
источник

Ответы:

16

Как определяет POSIX, mv будет дублировать исходный файл по пути назначения, и если ничего не пойдет не так, исходный файл должен быть удален:

  1. Файловая иерархия с корнем в source_file должна дублироваться как файловая иерархия с корнем в пути назначения

  2. Файловая иерархия с корнем в source_file должна быть удалена. Если по какой-либо причине это не удается, mv должен написать диагностическое сообщение для стандартной ошибки, больше ничего не делать с текущим исходным_файлом и перейти к любым оставшимся исходным_файлам.

Если вы перемещаетесь в той же файловой системе, вы перемещаете запись только из одного места в файловой системе в другое.

Это гарантирует, что вы не потеряете исходный файл, если в процессе перемещения возникнут ошибки.

cuonglm
источник
16

Он консервативен и не удаляет файлы до тех пор, пока копирование не удастся. Это облегчает восстановление, если что-то идет не так.

hildred
источник
но в папке много файлов
Тим
7
@Tim: Он не начинает удалять исходные файлы, пока все файлы не будут продублированы на томе назначения. Если вам нужно, чтобы файлы перемещались по одному, чтобы никогда не использовалось больше «дополнительного» пространства, чем у самого большого файла, вам нужно создать цикл для этого.
Уоррен Янг
4
Вы когда-нибудь делали переезд в MS-Windows, и примерно в середине пути что-то пошло не так. И источник, и пункт назначения - беспорядок, и вам остается это исправить. Если вы не фанат ужина, то, вероятно, просто удалите оба и научитесь не делать это снова.
Ctrl-Alt-Delor