С чего начать Первые шаги трек · 15 ступеней
Linux Labs

mv — переместить или переименовать

5 мин Ubuntu 24.04 · GNU coreutils 9.4

Команда 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) делает две вещи одной командой. Если назначение — существующий каталог, файл переезжает в него. Иначе файл получает новое имя.

text
student@ubuntu:~$ mv -v draft.txt notes/
renamed 'draft.txt' -> 'notes/draft.txt'
student@ubuntu:~$ mv -v notes/draft.txt notes/final.txt
renamed 'notes/draft.txt' -> 'notes/final.txt'

В пределах одного раздела диска 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

Переименовать файл в другом каталоге, не переходя туда

bash
mv /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.off
mv /var/log/app/{app.log,app.log.old}    # то же через {} оболочки

Перенести все файлы по шаблону

bash
mkdir -p ~/archive
mv -v *.log ~/archive/

Шаблон *.log раскрывает оболочка (см. globbing). Сначала проверь, что под него попадёт: ls *.log.

Переименовать много файлов: .txt → .md

bash
for f in *.txt; do mv -- "$f" "${f%.txt}.md"; done

${f%.txt} отрезает расширение, кавычки сохраняют имена с пробелами.

Безопасно заменить рабочий файл

bash
cp -a app.conf app.conf.new   # правишь копию
nano app.conf.new
mv app.conf.new app.conf      # подмена одним действием

Внутри одного раздела mv меняет файл атомарно: программа видит либо старый файл, либо новый, а не половину.

Неполадки

5

mv: 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 — обзор базовых команд с файлами.
Загрузка…