Объяснение команды mv в Linux для начинающих (8 примеров)

Так же, как cp для копирования и rm для удаления, в Linux также есть встроенная команда для перемещения и переименования файлов. Она называется mv. В этой статье мы рассмотрим основы этого инструмента командной строки на понятных примерах. Обратите внимание, что все примеры, использованные в этом руководстве, были протестированы на Ubuntu 22.04 LTS.

Команда mv в Linux

Как уже упоминалось, команда mv в Linux используется для перемещения или переименования файлов. Ниже приведен синтаксис команды:

mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...

А вот что об этом говорит справочная страница:

Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Следующие примеры в формате «вопрос-ответ» помогут вам лучше понять, как работает этот инструмент.

В1. Как использовать команду mv в Linux?

Если вы просто хотите переименовать файл, вы можете использовать команду mv следующим образом:

mv [filename] [new_filename]

Например:

mv names.txt fullnames.txt

Как использовать команду mv в Linux

Аналогично, если требуется переместить файл в новое место, используйте команду mv следующим образом:

mv [filename] [dest-dir]

Например:

mv fullnames.txt /home/himanshu/Downloads

Команда mv в Linux

Вопрос 2. Как сделать так, чтобы mv запрашивал подтверждение перед перезаписью?

По умолчанию команда mv не запрашивает подтверждение, когда операция предполагает перезапись существующего файла. Например, на следующем скриншоте показано, что существующий файл full_names.txt был перезаписан командой mv без какого-либо предупреждения или уведомления.

Как заставить mv запрашивать подтверждение перед перезаписью

Однако, если вы хотите, вы можете заставить mv запрашивать подтверждение, используя -i опцию командной строки.

mv -i [file_name] [new_file_name]

опция командной строки -i

Таким образом, приведенные выше скриншоты ясно показывают, что -i приводит к тому, что mv запрашивает разрешение пользователя перед перезаписью существующего файла. Обратите внимание, что если вы хотите явно указать, что не хотите, чтобы mv запрашивал разрешение перед перезаписью, то используйте -f опцию командной строки.

В3. Как сделать так, чтобы mv не перезаписывал существующий файл?

Для этого необходимо использовать -n опцию командной строки.

mv -n [filename] [new_filename]

На следующем снимке экрана показано, что операция mv не удалась, так как файл с именем «full_names.txt» уже существовал, а в команде был указан параметр -n.

Как сделать так, чтобы mv не перезаписывал существующий файл

Примечание:

If you specify more than one of -i, -f, -n, only the final one takes effect.

Вопрос 4. Как заставить mv удалять конечные косые черты (если они есть) из аргумента-источника?

Чтобы удалить конечные косые черты из аргументов-источников, используйте —strip-trailing-slashes опцию командной строки, как показано ниже.

mv --strip-trailing-slashes [source] [dest]

Вот как в официальной документации объясняется полезность этого параметра:

This is useful when a source argument may have a trailing slash and specify a symbolic link to a directory. This scenario is in fact rather common because some shells can automatically append a trailing slash when performing file name completion on such symbolic links. Without this option, mv, for example, (via the system’s rename function) must interpret a trailing slash as a request to dereference the symbolic link and so must rename the indirectly referenced directory and not the symbolic link. Although it may seem surprising that such behavior be the default, it is required by POSIX and is consistent with other parts of that standard.

Вопрос 5. Как заставить mv обрабатывать место назначения как обычный файл?

Чтобы быть уверенным, что объект назначения будет обрабатываться как обычный файл (а не как каталог), используйте -T .

mv -T [source] [dest]

Вот почему существует этот параметр командной строки:

This can help avoid race conditions in programs that operate in a shared area. For example, when the command ‘mv /tmp/source /tmp/dest’ succeeds, there is no guarantee that /tmp/source was renamed to /tmp/dest: it could have been renamed to/tmp/dest/source instead, if some other process created /tmp/dest as a directory. However, if mv -T /tmp/source /tmp/dest succeeds, there is no question that/tmp/source was renamed to /tmp/dest.
In the opposite situation, where you want the last operand to be treated as a directory and want a diagnostic otherwise, you can use the --target-directory (-t) option.

В6. Как заставить mv перемещать файл только в том случае, если он более новый, чем файл назначения?

Предположим, что в каталоге «Загрузки» вашей системы существует файл с именем fullnames.txt, а в вашем домашнем каталоге есть файл с таким же именем. Теперь вы хотите обновить файл ~/Downloads/fullnames.txt с помощью файла ~/fullnames.txt, но только в том случае, если последний более новый. В этом случае вам нужно использовать опцию командной строки -u .

mv -u ~/fullnames.txt ~/Downloads/fullnames.txt

Эта опция особенно полезна в тех случаях, когда вам нужно принимать такие решения изнутри скрипта оболочки.

В7. Как заставить mv выводить подробную информацию о том, что именно он делает?

Если вы хотите, чтобы mv выводил информацию, объясняющую, что именно он делает, используйте -v опцию командной строки.

mv -v [filename] [new_filename]

Например, на следующих скриншотах показано, как mv выводит полезную информацию о том, что именно он сделал.

Как заставить mv выводить подробную информацию о том, что он делает

В8. Как заставить mv создавать резервную копию существующих файлов в месте назначения?

Это можно сделать с помощью -b параметра командной строки. Созданный таким образом файл резервной копии будет иметь то же имя, что и файл назначения, но с добавленной к нему тильдой (~). Вот пример:

Как заставить mv создавать резервные копии существующих файлов назначения

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *