linux files

mv

Переместить или переименовать файлы и директории

Описание

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

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

Переименование — это частный случай перемещения: источник и назначение находятся в одном каталоге, но с разными именами. Именно поэтому для переименования не нужен отдельный инструмент: mv справляется с обеими задачами. Для массового переименования по шаблону используют утилиту rename (Perl) или mmv.

Синтаксис

mv [ОПЦИИ] ИСТОЧНИК НАЗНАЧЕНИЕ mv [ОПЦИИ] ИСТОЧНИК... ДИРЕКТОРИЯ

Флаги и опции

Флаг Описание Пример
-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 внутри одной ФС — мгновенная операция
При перемещении в пределах одной файловой системы mv работает мгновенно — он обновляет только запись в каталоге, а данные на диске не трогает. Это относится и к директориям любого размера. Перемещение гигабайтной папки внутри одного раздела займёт миллисекунды.
Совет: безопасный alias в ~/.bashrc
Добавьте alias mv='mv -i' в ~/.bashrc для интерактивного режима по умолчанию. В скриптах явно указывайте mv -f для автоматического перезаписывания без вопросов — это делает намерение очевидным.
Совет: mv для атомарной замены файлов
Профессиональный приём: записывайте новую версию файла во временный файл, затем заменяйте оригинал через mv: mv new_config.tmp /etc/app/config.conf. Операция атомарна — читатели увидят либо старую, либо новую версию, но не «наполовину записанную».
Внимание: mv перезаписывает без предупреждения
По умолчанию mv молча перезапишет существующий файл назначения. Данные будут безвозвратно утеряны (если нет резервной копии). Используйте -i в интерактивной работе или -n для полного запрета перезаписи.
Внимание: перемещение между ФС копирует данные
При перемещении файлов между разными файловыми системами (например, mv /home/user/file /mnt/usb/) mv выполняет физическое копирование + удаление исходника. Если процесс прервётся на середине, файл может оказаться в повреждённом состоянии в назначении. Для надёжности в таких случаях используйте cp + проверку + rm вручную.