mv
Переместить или переименовать файлы и директории
Описание
mv (от move) — команда для перемещения и переименования файлов и директорий.
В отличие от cp, исходный файл после операции исчезает — это атомарная операция переноса
записи в файловой системе. При перемещении в пределах одной файловой системы mv
не копирует данные физически: он лишь обновляет метаданные каталога (inode остаётся прежним),
что делает операцию мгновенной вне зависимости от размера файла.
При перемещении между разными файловыми системами (например, с одного диска на другой) mv
выполняет полное копирование данных, а затем удаляет исходный файл — это аналогично cp
плюс rm. В таком случае время операции пропорционально размеру файла.
Переименование — это частный случай перемещения: источник и назначение находятся в одном каталоге,
но с разными именами. Именно поэтому для переименования не нужен отдельный инструмент: mv
справляется с обеими задачами. Для массового переименования по шаблону используют утилиту
rename (Perl) или mmv.
Синтаксис
- ИСТОЧНИК — файл или директория для перемещения/переименования
- НАЗНАЧЕНИЕ — новое имя или путь к директории назначения
- Если НАЗНАЧЕНИЕ — существующая директория, ИСТОЧНИК перемещается внутрь неё
- Если НАЗНАЧЕНИЕ — несуществующий путь, ИСТОЧНИК переименовывается в это имя
- При нескольких ИСТОЧНИКАХ последний аргумент должен быть директорией
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-i, --interactive |
Запрашивать подтверждение перед перезаписью существующего файла | mv -i old.txt new.txt |
-n, --no-clobber |
Не перезаписывать существующий файл назначения (молча пропустить) | mv -n src.txt dst.txt |
-f, --force |
Не спрашивать подтверждений, перезаписывать без вопросов (отменяет -i) | mv -f src.txt dst.txt |
-v, --verbose |
Выводить информацию о каждом перемещаемом файле | mv -v *.log archive/ |
-u, --update |
Перемещать только если источник новее назначения или назначение отсутствует | mv -u new.conf /etc/ |
--backup[=CONTROL] |
Создать резервную копию каждого существующего файла назначения перед перезаписью | mv --backup=numbered f.txt dst/ |
-b |
Краткий аналог --backup — создаёт резервную копию с суффиксом ~ |
mv -b config.txt /etc/app/ |
-S СУФФИКС, --suffix=СУФФИКС |
Задать суффикс для резервных копий вместо ~ |
mv -b -S .bak f.txt dst/ |
-t DIR, --target-directory=DIR |
Переместить все источники в указанную директорию (удобно с xargs) | mv -t /backup/ *.log |
-T, --no-target-directory |
Рассматривать НАЗНАЧЕНИЕ как обычный файл, не как директорию | mv -T src destfile |
Паттерны использования
Переименовать файл
mv old_name.txt new_name.txt mv server.py app.py
Базовое переименование — исходный файл исчезает, появляется файл с новым именем.
Переместить файл в директорию
mv report.pdf ~/Documents/ mv *.log /var/log/archive/
Если назначение — существующая директория, файл перемещается внутрь. Glob-паттерны позволяют переместить несколько файлов.
Переименовать директорию
mv old_project/ new_project/ mv src/ lib/
Для директорий флаг -r не нужен — mv перемещает директорию целиком атомарно (в пределах одной ФС).
Переместить с резервной копией
# Создать backup.conf~ перед перезаписью mv -b myconfig.conf /etc/app/config.conf # С явным суффиксом mv -b -S .$(date +%Y%m%d) app.conf /etc/
Флаг -b автоматически создаёт резервную копию файла, который будет перезаписан. Безопасно для развёртывания конфигураций.
Безопасное перемещение с подтверждением
mv -i important_data.sql /backup/ # mv: overwrite '/backup/important_data.sql'? y
В интерактивном режиме mv спрашивает разрешение на перезапись. Критически важно при работе с важными данными.
Переместить несколько файлов в директорию
mv -t /var/log/archive/ error.log access.log debug.log
# Или с glob:
mv -v *.{log,tmp} /tmp/cleanup/
Флаг -t удобен при использовании с find ... | xargs mv -t dir/, так как директория-назначение идёт первой.
Советы и предупреждения
При перемещении в пределах одной файловой системы
mv работает мгновенно — он обновляет
только запись в каталоге, а данные на диске не трогает. Это относится и к директориям любого размера.
Перемещение гигабайтной папки внутри одного раздела займёт миллисекунды.
Добавьте
alias mv='mv -i' в ~/.bashrc для интерактивного режима по умолчанию.
В скриптах явно указывайте mv -f для автоматического перезаписывания без вопросов —
это делает намерение очевидным.
Профессиональный приём: записывайте новую версию файла во временный файл, затем заменяйте оригинал через
mv: mv new_config.tmp /etc/app/config.conf. Операция атомарна —
читатели увидят либо старую, либо новую версию, но не «наполовину записанную».
По умолчанию
mv молча перезапишет существующий файл назначения. Данные будут
безвозвратно утеряны (если нет резервной копии). Используйте -i в интерактивной
работе или -n для полного запрета перезаписи.
При перемещении файлов между разными файловыми системами (например,
mv /home/user/file /mnt/usb/)
mv выполняет физическое копирование + удаление исходника. Если процесс прервётся на середине,
файл может оказаться в повреждённом состоянии в назначении. Для надёжности в таких случаях используйте
cp + проверку + rm вручную.