МВ (Unix)
Оригинальный автор(ы) | Кен Томпсон , Деннис Ритчи ( AT&T Bell Laboratories ) |
---|---|
Разработчик(и) | Различные с открытым исходным кодом и коммерческие разработчики разработчики |
Первоначальный выпуск | 3 ноября 1971 г |
Операционная система | Unix , Unix-подобные , Inferno , IBM i |
Платформа | Кросс-платформенный |
Тип | Команда |
Лицензия | основные утилиты : GPLv3 |
mv
— это команда Unix , которая перемещает один или несколько файлов или каталогов из одного места в другое. Если оба имени файла находятся в одной файловой системе, это приводит к простому переименованию файла; в противном случае содержимое файла копируется в новое место, а старый файл удаляется. С использованием mv
требует, чтобы у пользователя было разрешение на запись в каталоги, между которыми будет перемещаться файл. Это потому, что mv
изменяет содержимое обоих каталогов ( т. е . исходного и целевого), участвующих в перемещении. При использовании mv
команде для файлов, расположенных в одной файловой системе, временная метка файла не обновляется.
В реализациях UNIX, производных от AT&T UNIX , cp , ln и mv реализованы как одна программа с жестко связанными двоичными файлами. Поведение выбирается из имени пути argv[0]
. Это распространенный метод, с помощью которого тесно связанные команды, объединенные в единое целое, позволяют пользователю указать конкретный порядок предполагаемых действий.
История
[ редактировать ]А move
Команда, которая перемещает запись каталога в новый каталог, была впервые реализована в Multics . С ним можно заключить контракт mv
. [1] Позже, mv
команда появилась в версии 1 Unix [2] и стал частью второго выпуска X/Open Portability Guide за 1987 год. [3] Версия mv
включенный в состав GNU coreutils, был написан Майком Паркером, Дэвидом Маккензи и Джимом Мейерингом. [4] Команда доступна в виде отдельного пакета для Microsoft Windows как часть UnxUtils коллекции , состоящей из собственных Win32- портов распространенных GNU Unix-подобных утилит. [5] Команда mv также была перенесена в операционную систему IBM i . [6]
Конфликт существующего файла
[ редактировать ]Когда имя файла перемещается в существующее имя файла, существующий файл удаляется ( затирается по умолчанию ). Если существующий файл недоступен для записи, но находится в доступном для записи каталоге, команда mv запрашивает подтверждение (при запуске с терминала) перед продолжением, если не используется опция -f (force).
Случайную перезапись можно предотвратить с помощью GNU. -n
(длинный формат: --no-clobber
) флаг. Альтернативно, -u
( --update
) перезаписывает только файлы назначения, которые старше исходных файлов, -i
( --interactive
) запрашивает подтверждение при каждом конфликте имен и -b
( --backup
) переименовывает целевые файлы.
Связанная с этим неоднозначность возникает, когда имя файла перемещается в существующий каталог. По умолчанию, mv
воспринял бы это как попытку переместить имя внутри этого каталога. GNU mv имеет -T
переключатель для отключения этого предположения и вместо этого попробуйте перезаписать каталог. Обратный -t
делает операцию перехода в каталог явной. [4]
Перемещение вместо копирования и удаления
[ редактировать ]Перемещение файлов внутри одной файловой системы обычно реализуется иначе, чем копирование файла с последующим удалением оригинала. На платформах, которые не поддерживают системный вызов переименования , в новый каталог добавляется новая ссылка , а исходная удаляется. Данные файла не доступны. Все POSIX -совместимые системы реализуют вызов переименования .
Фактическое перемещение (фактически переименование) выполняется значительно быстрее, чем обходная процедура копирования и перемещения. I-номер файла (сокращение от « номер индексного дескриптора ») не меняется. Для чтения перемещаемого файла не требуется никаких разрешений, поскольку — концептуально — только каталогизирующая в результате «перемещения» изменяется информация. Поскольку исходный и целевой каталоги изменяются, а именно записи создаются в целевом каталоге и удаляются из исходного каталога, для завершения перемещения требуется разрешение на запись в обоих каталогах. Перемещение файлов из одной файловой системы в другую может завершиться неудачно или может быть автоматически выполнено как атомарное действие копирования и удаления; фактические детали зависят от реализации.
Для перемещения каталога из одного родительского каталога в другой родительский каталог требуется разрешение на запись в перемещаемом каталоге, а также разрешения на изменение старых и новых родительских каталогов. Это связано с тем, что i-номер для записи каталога «..» (который можно использовать в любом контексте как псевдоним родительского элемента текущего каталога) изменяется в результате переименования.
Параметры
[ редактировать ]Большинство версий поддержки mv:
-i
При интерактивной обработке напишите подсказку в стандартную ошибку перед перемещением файла, который перезапишет существующий файл. Если ответ стандартного ввода начинается с символа «y» или «Y», предпринимается попытка перемещения. (Переопределяет предыдущую опцию -f.)-f
принудительно перезаписать пункт назначения (переопределяет предыдущую опцию -i).
Эти параметры являются частью рекомендаций по переносимости X/Open, которые позже легли в основу POSIX и SUS . Все POSIX-совместимые реализации mv должны поддерживать их. [7]
Примеры
[ редактировать ]Команда | Объяснение |
---|---|
mv myfile mynewfilename | переименовывает «myfile» в «mynewfilename». |
mv myfile subdir/myfile | перемещает «myfile» в «subdir/myfile» относительно текущего каталога |
mv myfile subdir | то же, что и предыдущая команда, имя файла подразумевается таким же |
mv be.03 /mnt/bkup/bes | копирует «be.03» в каталог «bes» смонтированного тома «bkup», затем «be.03» удаляется |
mv be.03/* /mnt/bkup/bes | То же, что и выше, за исключением того, что каждый файл перемещается из be.03 удаляется индивидуально, а не все сразу после завершения всего копирования. |
mv afile another mydir | перемещает несколько файлов в каталог «mydir» |
mv /var/log/*z ~/logs | Это займет больше времени, чем ожидалось, если «/var» находится в другой файловой системе, как это часто бывает, поскольку файлы будут копироваться и удаляться. Оболочка расширяется ~ пользователя в домашний каталог и лечит * как подстановочный знак . |
Обратите внимание, что в приведенном выше примере /mnt относится к каталогу («точке монтирования»), к которому смонтирована данная файловая система. Именование таких каталогов /mnt является общепринятым соглашением, но оно ни в коем случае не является обязательным. «Файловую систему» можно рассматривать как независимое дерево, которое логически рассматривается как единое целое; его корень «монтируется» поверх каталога по выбору администратора. Любое предыдущее содержимое этого каталога невидимо, но оно «восстанавливается» при размонтировании нового тома.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Мультикоманды
- ^ FreeBSD по основным командам Руководство –
- ^ Единая спецификация UNIX , версия 4 от The Open Group : перемещение файлов — Справочник по оболочке и утилитам,
- ^ Jump up to: а б Linux по основным командам Руководство –
- ^ «Собственные порты Win32 некоторых утилит GNU» . unxutils.sourceforge.net .
- ^ ИБМ . «IBM System i Версия 7.2 Программирование Qshell» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
- ^ Единая спецификация Unix # 1980-е: Мотивация
Внешние ссылки
[ редактировать ]
- Единая спецификация UNIX , версия 4 от Open Group. – Справочник по оболочке и утилитам,
- Inferno по общим командам Руководство –