- Как переименовать файл Linux
- Как переименовать файл в Linux с помощью mv
- Переименование файлов Linux с помощью rename
- Переименование файлов в pyRenamer
- Выводы
- Массовое переименование файлов в Linux.
- Offtop. Переименовать один файл в Linux: mv имя-файла1 имя-файла2
- Смотрите также
- Переименование группы файлов по маске
- Переименование файлов маске linux
Как переименовать файл Linux
Переименование файла linux — очень простая операция, но для новичков в Linux эта задача может оказаться сложной. Также здесь есть несколько нюансов и возможностей, которые желательно знать уже опытным пользователям, например, массовое переименование. В графическом интерфейсе все делается очень просто, но настоящую гибкость дает терминал.
В этой статье мы рассмотрим как переименовать файл в Linux с помощью терминала, рассмотрим такие возможности, как массовое пакетное переименование файлов, а также регулярные выражения.
Как переименовать файл в Linux с помощью mv
В Linux существует замечательная стандартная утилита mv, которая предназначена для перемещения файлов. Но по своей сути перемещение — это то же самое, что и переименование файла linux, если выполняется в одной папке. Давайте сначала рассмотрим синтаксис этой команды:
$ mv опции файл-источник файл-приемник
Теперь рассмотрим основные опции утилиты, которые могут вам понадобиться:
- -f — заменять файл, если он уже существует;
- -i — спрашивать, нужно ли заменять существующие файлы;
- -n — не заменять существующие файлы;
- -u — заменять файл только если он был изменен;
- -v — вывести список обработанных файлов;
Чтобы переименовать файл linux достаточно вызвать утилиту без дополнительных опций. Просто передав ей имя нужного файла и новое имя:
Как видите, файл был переименован. Вы также можете использовать полный путь к файлу или переместить его в другую папку:
mv /home/sergiy/test/newfile /home/sergiy/test/file1
Обратите внимание, что у вас должны быть права на запись в ту папку, в которой вы собираетесь переименовывать файлы. Если папка принадлежит другому пользователю, возможно, нужно будет запускать программу через sudo. Но в таком случае лучше запускать с опцией -i, чтобы случайно ничего не удалить.
Переименование файлов Linux с помощью rename
В Linux есть еще одна команда, которая позволяет переименовать файл. Это rename. Она специально разработана для этой задачи, поэтому поддерживает такие вещи, как массовое переименование файлов linux и использование регулярных выражений. Синтаксис утилиты тоже сложнее:
$ rename опции ‘s/ старое_имя / новое_имя ‘ файлы
$ rename опции старое_имя новое_имя файлы
В качестве старого имени указывается регулярное выражение или часть имени которую нужно изменить, новое имя указывает на что нужно заменить. Файлы — те, которые нужно обработать, для выбора файлов можно использовать символы подставки, такие как * или ?.
- -v — вывести список обработанных файлов;
- -n — тестовый режим, на самом деле никакие действия выполнены не будут;
- -f — принудительно перезаписывать существующие файлы;
Например, переименуем все htm файлы из текущей папки в .html:
Символ звездочки означает, что переименование файлов linux будет выполнено для всех файлов в папке. В регулярных выражениях могут применяться дополнительные модификаторы:
- g (Global) — применять ко всем найденным вхождениям;
- i (Case Censitive) — не учитывать регистр.
Модификаторы размещаются в конце регулярного выражения, перед закрывающей кавычкой. Перед тем, как использовать такую конструкцию, желательно ее проверить, чтобы убедиться, что вы не допустили нигде ошибок, тут на помощь приходит опция -n. Заменим все вхождения DSC на photo в именах наших фотографий:
rename -n ‘s/DSC/photo/gi’ *.jpeg
Будут обработаны DSC, DsC и даже dsc, все варианты. Поскольку использовалась опция -n, то утилита только выведет имена изображений, которые будут изменены.
Можно использовать не только обычную замену, но и полноценные регулярные выражения чтобы выполнить пакетное переименование файлов linux, например, переделаем все имена в нижний регистр:
Из этого примера мы видим, что даже если такой файл уже существует, то он перезаписан по умолчанию не будет. Не забывайте использовать опцию -n чтобы ничего случайно не повредить.
Переименование файлов в pyRenamer
Если вы не любите использовать терминал, но вам нужно массовое переименование файлов Linux, то вам понравится утилита pyrenamer. Это графическая программа и все действия здесь выполняются в несколько щелчков мыши. Вы можете установить ее из официальных репозиториев:
sudo apt install pyrenamer
В окне программы вы можете видеть дерево файловой системы, центральную часть окна, где отображаются файлы, которые будут изменены, а также панель для указания параметров переименования.
Вы можете удалять или добавлять символы, переводить регистр, автоматически удалять пробелы и подчеркивания. У программы есть подсказки, чтобы сделать ее еще проще:
Опытным пользователям понравится возможность pyRenamer для переименования мультимедийных файлов из их метаданных. Кроме того, вы можете переименовать один файл если это нужно. Эта утилита полностью реализует функциональность mv и remove в графическом интерфейсе.
Выводы
В этой статье мы рассмотрели как переименовать файл в консоли linux. Конечно, есть и другие способы, например, написать скрипт, или использовать файловые менеджеры. А как вы выполняете сложные операции по переименованию? Напишите в комментариях!
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Массовое переименование файлов в Linux.
Сегодня я продолжу рассказывать об азах Linux. В качестве примера гибкости и удобства, рассмотрим операцию массового переименования файлов. В общем достаточно тривиальная задача, но в Linux ее можно выполнить не одним и даже не двумя способами. Список примеров не претендует на полноту, но общее представление даст.
Offtop. Переименовать один файл в Linux: mv имя-файла1 имя-файла2
Итак, допустим у нас есть несколько файлов:
myapp.conf myapp.txt myapp.sh whatis.sh
Файлы sh мы хотим переименовать в sh.bak. Рассмотрим варианты:
Утилита rename входит в стандартную поставку Debian, так что начнем с нее.
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v отобразить имена успешно переименованных файлов.
-n отобразить список файлов, которые будут переименованы, без переименования в итерации.
-f перезаписать уже существующие файлы.
perlexpr — шаблон для переименования.
Для того, чтобы выполнить переименование файлов согласно условию, выполним команду:
Рассмотрим perlexr подробнее:
s=указывает, что требуется замещение.
/.sh/=Строка, которую будем замещать.
/.sh.bak/ = строка, на которую будем замещать
g=global, будем замещать все найденные вхождения.
С помощью rename можно быстро изменить регистр файлов. Например поднимем регистр файлов из примера:
mmv — программа для массового перемещения, переименования, копирования, объединения файлов.
По умолчанию она не включена в состав Debian. Поставим ее:
Наша задача решается одной строкой:
Теперь решим нашу задачу стандартной командой mv. Для этого нам прийдется немного попрограммировать в bash.
Попробуем усложить задачу. Например у нас есть куча файлов JPG:
1234234.jpg e456567657.jpg 234df34.jpg …
Мы хотим привести их к следующему виду:
file1.jpg file2.jpg file3.jpg …
Midnight Commander
В любимом многими mc, процесс переименования по маске выполняется просто и непринужденно в два действия.
Все примеры, приведенные выше, так или иначе работают во всех Linux, BSD, Mac OS, если стоят соответствующие утилиты.
На этом все, спасибо за внимание.
Смотрите также
Переименование группы файлов по маске
Доброго дня. Есть некоторое количество файлов в названиях которых надо произвести изменения. Некоторые символы заменить, в определённый блок символов, разделённый «_», добавить дополнительный символ. Порылся на форуме и в гугле, нашёл интересную команду rename, но т.к. от программирования далёк не могу понять как именно сделать изменения по маске файла, т.к. все названия однотипные и менять в них тоже нужно одно и тоже. Интересует синтаксис команды и её применение к группе файлов. Спасибо.
- Приводи примеры, экстрасенсов тут нет.
- Приводи команды, которые ты использовал.
- Подходящие инструменты — bash, sed, rename, python, perl, emacs, krename, thunar, nautilus на твой вкус.
$ ls -1 kotlin-daemon.2021-10-* kotlin-daemon.2021-10-12.00-22-53-396.00.log kotlin-daemon.2021-10-12.10-35-13-169.00.log kotlin-daemon.2021-10-12.22-17-21-764.00.log kotlin-daemon.2021-10-21.16-19-19-453.00.log kotlin-daemon.2021-10-21.22-44-02-369.00.log kotlin-daemon.2021-10-21.22-44-02-369.00.log.lck $ rename kotlin java kotlin-daemon.2021-10-* $ ll java-daemon.2021-10-* java-daemon.2021-10-12.00-22-53-396.00.log java-daemon.2021-10-12.10-35-13-169.00.log java-daemon.2021-10-12.22-17-21-764.00.log java-daemon.2021-10-21.16-19-19-453.00.log java-daemon.2021-10-21.22-44-02-369.00.log java-daemon.2021-10-21.22-44-02-369.00.log.lck
Читай man rename, в инете полно примеров. Первая ссылка в утке.
Прошу прощения, вот примеры для переименования. В файлах помечено что нужно заменить. У меня получается заменить только Y на N и расширение с .log на .bak. Не могу понять как прибавить одну цифру в номер после даты.
123456_UVAO_**Y**_20211019_**001**_00000.**log** 123456_UVAO_**Y**_20211019_**002**_00000.**log** 123456_UVAO_**Y**_20211019_**003**_00000.**log** 123456_UVAO_**Y**_20211019_**003**_00000.**log** надо переименовать в 123456_UVAO_**N**_20211019_**1**001_00000.**bak** 123456_UVAO_**N**_20211019_**1**002_00000.**bak** 123456_UVAO_**N**_20211019_**1**003_00000.**bak** 123456_UVAO_**N**_20211019_**1**003_00000.**bak**
Дошёл вот до такого rename, дальше продвинуться не могу rename -v -n ‘y/Y?log/N?bak/’ *.log
Возможно проще или удобнее эту задачу решить через mv,bash,sed . Но там я пока вообще не понимаю в какую сторону копать.
Что значит звёздочик в именах файлов? Вобще вам нужно s/// выражение, а не y///. С помощью y/// в только транслируете символы, а не добавляете новые. Не проверял:
Ваш пример взорвёт ТСу мозг, так как в современных дебианах под именем rename находится не бинарник из util-linux, а преловый скрипт (CPAN rename).
Звёздочки задумывались как выделение жирным, что бы понять что заменить, не учёл что они в коде не работают. Так что просто убираете все звёздочки — это имя файла) Спасибо за ваш вариант, но не сработал.
А есть идеи не через rename?
Звёздочки задумывались как выделение жирным
Это усложняет регулярное выражение, так лучше не делать.
foxy_ant ★★ ( 23.10.21 21:17:25 MSK )
Последнее исправление: foxy_ant 23.10.21 21:18:48 MSK (всего исправлений: 1)
Не могу понять как прибавить одну цифру в номер после даты.
foxy_ant ★★ ( 23.10.21 21:38:20 MSK )
Последнее исправление: foxy_ant 23.10.21 21:39:41 MSK (всего исправлений: 1)
Ну повтори prename на свой лад.
Это усложняет регулярное выражение, так лучше не делать.
Моя ошибка, не учёл что «**» — выделение жирным не будет работать в рамках ««`» — выделения кода. Из-за этого ввёл в заблуждение.
Это сработало, но почему-то теперь не срабатывает смена расширения файла. s/Y?_20211019_/N_20211019_1/ меняет первые 2 параметра. Сможете доразложить, а то уже ничего понять не могу. Через что можно добавить третий аргумент?
Кстати, а можно ли запустить 2 rename последовательно, друг за другом в одну строку?
можно ли запустить 2 rename последовательно, друг за другом в одну строку?
Переименование файлов маске linux
Итак, у нас есть куча файлов, среди которых надо навести порядок. Для этого сделаем групповое переименование.
Утилита rename входит в стандартную поставку Debian, так что начнем с нее.
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v отобразить имена успешно переименованных файлов.
-n отобразить список файлов, которые будут переименованы, без переименования в итерации.
-f перезаписать уже существующие файлы.
perlexpr — шаблон для переименования.
Для того, чтобы выполнить переименование файлов согласно условию, выполним команду:
Рассмотрим perlexr подробнее:
s=указывает, что требуется замещение.
/.sh/=Строка, которую будем замещать.
/.sh.bak/ = строка, на которую будем замещать
g=global, будем замещать все найденные вхождения.
С помощью rename можно быстро изменить регистр файлов. Например поднимем регистр файлов из примера:
mmv — программа для массового перемещения, переименования, копирования, объединения файлов.
По умолчанию она не включена в состав Debian. Поставим ее:
Наша задача решается одной строкой:
Теперь решим нашу задачу стандартной командой mv. Для этого нам прийдется немного попрограммировать в bash.
for i in *.sh;
do mv $i `basename $i sh`sh.bak;
done
Попробуем усложить задачу. Например у нас есть куча файлов JPG:
1234234.jpg
e456567657.jpg
234df34.jpg
…
Мы хотим привести их к следующему виду:
file1.jpg
file2.jpg
file3.jpg
…
j=0;
for i in *.jpg;
do let j+=1;
mv $i file$j.jpg ;
done
В любимом многими mc, процесс переименования по маске выполняется просто и непринужденно в два действия.
1. Через + выбираем файлы по маске *.sh
2. Нажимаем F6 и в destination указываем *.sh.bak
Все примеры, приведенные выше, так или иначе работают во всех Linux, BSD, Mac OS, если стоят соответствующие утилиты.