mv — переместить или переименовать
Команда mv переименовывает файл или каталог и переносит его в другое место; поверх существующего пишет молча.
Шпаргалка
9 команд Версия для печати-
mv old.txt new.txtпереименовать -
mv report.txt ~/archive/перенести в каталог, имя прежнее -
mv a.txt b.txt docs/несколько файлов в каталог -
mv project ~/old-projectкаталог — без ключей, целиком -
mv -i new.conf app.confспросить перед перезаписью -
mv -n new.conf app.confне перезаписывать существующий -
mv -v *.log /tmp/logs/печатать каждое перемещение -
mv -b new.conf app.confстарый станет app.conf~ -
mv -- -file.txt file.txtимя, которое начинается с минуса
Обзор
mv (move) делает две вещи одной командой. Если назначение — существующий
каталог, файл переезжает в него. Иначе файл получает новое имя.
В пределах одного раздела диска mv не копирует данные: меняется только запись
в каталоге, поэтому даже большой каталог «переезжает» мгновенно. Между разными
разделами mv копирует и затем удаляет исходник — это дольше.
Каталоги mv переносит без -r. Существующий файл назначения перезаписывает
молча.
Ключи
7Ключи безопасности те же, что у cp: -i, -n, -b. Полный список — man mv.
| Ключ | Что делает | Пример |
|---|---|---|
-i |
Спрашивать перед перезаписью существующего файла. | mv -i new.conf app.conf |
-n |
Не перезаписывать существующие файлы. | mv -n new.conf app.conf |
-v |
Печатать каждое действие — renamed 'a' -> 'b'. | mv -v *.log /tmp/logs/ |
-f |
Не спрашивать — отменяет -i, в том числе из псевдонима. | mv -f new.conf app.conf |
-b |
Перед перезаписью сохранить старый файл с ~ в конце имени. | mv -b new.conf app.conf |
-u |
Перемещать, только если источник новее назначения или назначения нет. | mv -u *.conf /srv/conf/ |
-t dir |
Каталог назначения первым аргументом — удобно с find и xargs. | mv -t /tmp/logs/ a.log b.log |
Ничего не найдено. Попробуй запрос короче.
Рецепты
4Перенести все файлы по шаблону
Шаблон *.log раскрывает оболочка (см. globbing). Сначала проверь, что под
него попадёт: ls *.log.
Переименовать много файлов: .txt → .md
${f%.txt} отрезает расширение, кавычки сохраняют имена с пробелами.
Безопасно заменить рабочий файл
Внутри одного раздела mv меняет файл атомарно: программа видит либо старый
файл, либо новый, а не половину.
Неполадки
5mv: cannot stat 'x': No such file or directory
Источника нет по этому пути. Проверь pwd и имя через ls; учти регистр.
mv: cannot move 'src' to 'dst/src': Directory not empty
В dst уже есть непустой каталог с тем же именем. mv не сливает каталоги.
Перенеси содержимое (mv src/* dst/src/) или выбери другое имя.
Permission denied
Для mv нужно право записи в оба каталога — откуда и куда, права самого файла не
важны. Проверь ls -ld обоих; системные каталоги — через sudo mv.
Файл пропал после mv
Назначение было не каталогом, а файлом с тем же именем: mv его перезаписал. Или
каталога назначения не было, и файл просто переименовался в это имя. Посмотри
ls -l по пути назначения.
mv: invalid option -- 'l' на имени -file.txt
Имя с минусом в начале mv принимает за набор ключей -f -i -l … и спотыкается
на первой незнакомой букве. Поставь -- перед именами или
укажи путь: mv ./-file.txt file.txt.
Опасно
2Перезапись без вопроса
mv new.conf app.conf заменит app.conf, если он есть, и старое содержимое не
вернуть. Пока не уверен, работай с mv -i или mv -n.
Опечатка в имени каталога назначения
mv *.log /tmp/lgos при отсутствии каталога /tmp/lgos переименует единственный
файл в lgos, а при нескольких файлах откажется работать. Ставь / в конце пути
каталога (/tmp/logs/): тогда mv проверит, что каталог существует.
См. также
- cp — скопировать и оставить исходник на месте.
- rm — удалить файл или каталог.
- ls — проверить, что получилось.
- globbing — шаблоны
*,?,{}для многих файлов. - files-basics — обзор базовых команд с файлами.
Есть неточность? Сообщить об ошибке в статье