При перемещении каталога в ту же файловую систему Вы только перемещаете запись каталога от одного местоположения в файловой системе к другому. Например, mv /source/dir /target/dir
удалит запись каталога dir
от /source
и создайте новый в /target
. Это сделано одним атомарным системным вызовом (т.е. непрерываемое). inode, содержащий записи каталога dir
а также фактическое содержание самого каталога не затронуто.
При перемещении каталога от одной файловой системы до другого все файлы сначала копируются в новую файловую систему и затем несвязанные с исходной. Таким образом, если Вы прерываете mv
в то время как это копирует, можно закончить с двумя копиями некоторых файлов – в старом местоположении и в новом.
Реализация GNU выполняет итерации по аргументам на командной строке, попытки переименовать сначала, и, если это приводит к сбою, рекурсивно копирует и затем рекурсивно удаляет источник. Так
mv a b c/
удалит прежде, чем скопировать b и не начнет удалять что-либо в, прежде чем целевая копия будет завершена.
Обратите внимание, что это относится к реализации GNU только.
Разъясниться: если каталога, содержащего d и e и b, будет файлом, то порядок будет
Нет. mv управляет объектом объектом, таким образом, объекты, которые были уже обработаны, будут удалены из источника.
Определенно нет. Перемещение сделано объектом объектом. Следовательно, объект, перемещенный к месту назначения на грани прерывания, не должен больше существовать в источнике.
Если mv был выпущен для большого файла (между различным), и он был прерван затем, источник будет неповрежден. На цели Вы будете видеть неполный файл на грани прерывания.
Можно однако восстановить mv с той же командой, и процесс продолжится.