Часто удобнее перемещать файлы через графический файловый менеджер, но в терминале это делают быстрее и надёжнее — особенно в сценариях автоматизации и на серверах. Команда mv доступна в большинстве дистрибутивов Linux: Ubuntu, Debian, Fedora, Kali и т. п.
Синтаксис mv
Основной синтаксис очень прост, но порядок аргументов имеет значение:
mv [option]
Каждый вызов mv должен содержать источник и назначение; опции идут перед ними. Пример простого перемещения файла в домашней папке в каталог Documents:
mv ~/test.txt ~/Documents
Это перенесёт файл test.txt из домашнего каталога в ~/Documents.
Чтобы переместить несколько файлов, перечислите их через пробел перед указанием назначения:
mv file1.txt file2.txt file3.txt ~/backup/
Если нужно переместить все файлы с общим шаблоном имени, используйте подстановочные символы (glob), например:
mv *.log ~/logs/
Основные опции mv
-v, –verbose — выводит список выполненных операций. Полезно в скриптах для логирования.
-i — интерактивный режим: спросит подтверждение при попытке перезаписать файл на месте назначения.
-n — не перезаписывать существующие файлы (автоматически отменяет операцию при конфликте).
-u — перемещать только если источник новее целевого файла или целевой отсутствует.
–backup=numbered — при конфликте сохраняет резервную копию назначения с суффиксом вроде ~1~ и перемещает файл.
Важно: по умолчанию mv перезаписывает файлы без предупреждения. Если вы не хотите потерять данные — используйте -i, -n или –backup.
Поведение mv при разных сценариях (иногда неочевидное)
На одном и том же файловом разделе mv чаще всего лишь переименовывает/перемещает ссылку — это очень быстро (операция rename).
При перемещении между разными файловыми системами mv фактически копирует файл в назначение и затем удаляет источник. В этом случае теряются некоторые свойства (например, дескрипторы открытых файлов), и операция может занять заметное время.
При недостатке прав mv не выполнит операцию: убедитесь, что у вас есть права на запись в целевой каталог и удаление из исходного.
Когда mv не подходит — альтернативные подходы
Копировать и удалить: cp -a src dest && rm src — полезно, если нужно гарантировать точную копию (атрибуты и права) и контролировать процесс.
rsync — лучший выбор для больших объёмов, удалённых хостов или при необходимости инкрементных копий и сохранения прав: rsync -av –remove-source-files src/ user@host:/dest/
scp/sftp/sshfs — для простого копирования между машинами через SSH.
git или другие VCS — для перемещений в проекте, где важна история изменений.
Быстрый шпаргалка (cheat sheet)
mv source.txt /path/to/dest/ # переместить один файл
mv -v a.txt b.txt /path/ # показать что делается
mv -i file /dest/ # спросить при перезаписи
mv -n *.conf /etc/myapp/ # не перезаписывать существующие
mv -u ~/Downloads/* /backup/ # сохранить более новые файлы
mv --backup=numbered foo /dest/ # при конфликте оставить резервную копию
Мини-методология для безопасного переноса (шпаргалка действий)
Оцените: перемещение внутри того же раздела или между разделами/машинами?
Проверьте права: ls -ld и ls -l .
Сделайте dry-run где возможно (rsync –dry-run).
Если риск потери данных — использовать -i или –backup.
Логируйте действия (-v >> logfile).
Важно: при массовых операциях всегда имейте резервную копию или тестовую прогонку на нескольких файлах.
Дерево принятия решения (когда использовать mv vs rsync vs scp)
flowchart TD
A{Нужно переместить файл'ы'?} --> B{На ту же файловую систему?}
B -- Да --> C[Используйте mv 'быстро, rename']
B -- Нет --> D{Локально или удалённо?}
D -- Локально --> E[Используйте mv, но ожидайте копирования и удаления]
D -- Удалённо --> F{Нужна синхронизация/инкремент?}
F -- Да --> G[Используйте rsync — безопасно и настраиваемо]
F -- Нет --> H[Используйте scp или rsync для копирования, затем удалите источник]
Контрольные списки по ролям
Системный администратор:
Проверить права и владельца (chown, chmod).
Использовать -v и логировать операции.
Использовать rsync при переносе между машинами.
Девопс/CI-инженер:
Предпочитать atomicy в сценариях деплоя (temp dir + mv для финального шага).
Использовать mv для быстрых переносов на одном разделе.
Обычный пользователь настольной системы:
Использовать -i для защиты от потери данных.
Пробовать сначала на паре файлов.
Критерии приёмки (тестовые случаи)
Перемещение одиночного файла внутри раздела должно быть мгновенным и сохранять владельца.
Перемещение между разделами должно скопировать содержимое, а затем удалить источник.
При конфликте с -i пользователь должен получать запрос подтверждения.
При использовании –backup=numbered целевой файл должен сохраняться с суффиксом резервной копии.
Частые ошибки и рамки применения
Ожидание мгновенности при переносе большого файла между разными дисками — неверно.
Надежность mv для удаления — будьте осторожны: mv не делает «корзину» по умолчанию.
Не используйте mv для синхронизации каталогов на удалённых серверах — используйте rsync.
Короткий глоссарий
Источник — файл или каталог, который вы перемещаете.
Назначение — каталог или новое имя, куда перемещается источник.
Перезапись — замена файла на месте назначения.
Резюме
mv — простой и быстрый инструмент для перемещения и переименования.
Используйте опции (-i, -n, -v, -u, –backup) чтобы обезопасить данные.
При переносе между машинами/разделами рассмотрите rsync или scp.
Краткое напоминание: перед массовыми операциями протестируйте команду на нескольких файлах и всегда имейте стратегию отката.