Переименовываем файлы в Linux
Как переименовать файл Linux
Переименование файла linux – очень простая операция, но для новичков в Linux эта задача может оказаться сложной. Также здесь есть несколько нюансов и возможностей, которые желательно знать уже опытным пользователям, например, массовое переименование. В графическом интерфейсе все делается очень просто, но настоящую гибкость дает терминал.
В этой статье мы рассмотрим как переименовать файл в Linux с помощью терминала, рассмотрим такие возможности, как массовое пакетное переименование файлов, а также регулярные выражения.
Как переименовать файл в Linux с помощью mv
В Linux существует замечательная стандартная утилита mv, которая предназначена для перемещения файлов. Но по своей сути перемещение – это то же самое, что и переименование файла linux, если выполняется в одной папке. Давайте сначала рассмотрим синтаксис этой команды:
$ mv опции файл-источник файл-приемник
Теперь рассмотрим основные опции утилиты, которые могут вам понадобиться:
- -f – заменять файл, если он уже существует;
- -i – спрашивать, нужно ли заменять существующие файлы;
- -n – не заменять существующие файлы;
- -u – заменять файл только если он был изменен;
- -v – вывести список обработанных файлов;
Чтобы переименовать файл linux достаточно вызвать утилиту без дополнительных опций. Просто передав ей имя нужного файла и новое имя:
mv file newfile
Как видите, файл был переименован. Вы также можете использовать полный путь к файлу или переместить его в другую папку:
mv /home/sergiy/test/newfile /home/sergiy/test/file1
Обратите внимание, что у вас должны быть права на запись в ту папку, в которой вы собираетесь переименовывать файлы. Если папка принадлежит другому пользователю, возможно, нужно будет запускать программу через sudo. Но в таком случае лучше запускать с опцией -i, чтобы случайно ничего не удалить.
Переименование файлов Linux с помощью rename
В Linux есть еще одна команда, которая позволяет переименовать файл. Это rename. Она специально разработана для этой задачи, поэтому поддерживает такие вещи, как массовое переименование файлов linux и использование регулярных выражений. Синтаксис утилиты тоже сложнее:
$ rename опции ‘s/ старое_имя / новое_имя ‘ файлы
$ rename опции старое_имя новое_имя файлы
В качестве старого имени указывается регулярное выражение или часть имени которую нужно изменить, новое имя указывает на что нужно заменить. Файлы – те, которые нужно обработать, для выбора файлов можно использовать символы подставки, такие как * или ?.
Рассмотрим опции утилиты:
- -v – вывести список обработанных файлов;
- -n – тестовый режим, на самом деле никакие действия выполнены не будут;
- -f – принудительно перезаписывать существующие файлы;
Например, переименуем все htm файлы из текущей папки в .html:
rename ‘s.htm/.html/’ *.htm
Или для изображений:
Символ звездочки означает, что переименование файлов 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. Конечно, есть и другие способы, например, написать скрипт, или использовать файловые менеджеры. А как вы выполняете сложные операции по переименованию? Напишите в комментариях!
rename — инструмент командной строки для переименования нескольких файлов в Linux
Мы часто используем команду «mv» для переименования одного файла в Linux. Однако быстрое переименование нескольких файлов или тем более группы файлов достаточно сложная задача для выполнения в терминале.
Linux поставляется с очень мощным встроенным инструментом под названием rename. Команда rename используется для переименования нескольких файлов или же группы файлов, переименования файлов из верхнего в нижний регистр и наоборот, и перезаписывания файлов с использованием выражений perl.
Переименование нескольких файлов в Linux
Команда «rename» является частью скрипта Perl и находится в разделе «/usr/bin/» во многих дистрибутивах Linux. Вы можете запустить команду «which», чтобы узнать местоположение команды rename.
Основной синтаксис команды переименования
Команда rename содержит несколько необязательных аргументов вместе с обязательными регулярными выражением для perl, которое указывают команде rename выполнять конкретные действия.
- -v: Показать, имена успешно переименованных файлов.
- -n: Показать, какие файлы были бы переименованы.
- -f: Принудительно перезаписать существующие файлы.
- perlexpr: регулярные выражения для Perl.
Для лучшего понимания этой утилиты мы обсудим несколько практических примеров этой команды в статье.
1. Пример базовой команды переименования
Предположим, у вас есть куча файлов с расширением «.html», и вы хотите переименовать все файлы в «.php» за один раз. Сначала выполните «ls -l», чтобы проверить список файлов с расширением «.html».
Теперь изменим расширение всех этих файлов с «.html» на «.php». Вы можете использовать следующую команду «rename» с регулярными выражением для perl, как показано ниже.
Примечание. В приведенной выше команде мы использовали два аргумента.
- Первый аргумент — это выражение perl, которое заменяет .html на .php.
- Второй аргумент — сообщает команде rename заменить все файлы на *.php.
Давайте проверим, все ли файлы переименованы в расширение .php, выполнив ls -l:
Выше вы видите, что все html файлы переименованы в php.
2. Проверьте изменения перед выполнением команды переименования
При выполнении важных или крупных задач переименования вы всегда можете проверить изменения, выполнив команду rename с аргументом «-n». Параметр «-n» точно скажет вам, какие изменения произойдут, но изменения не выполняются по-настоящему. Вот пример приведенной такой команды:
Примечание. Вышеуказанный вывод команды отображает только изменения, но в реальности изменения не выполняются, если только вы не запускаете команду без флага «-n».
3. Вывод полной информации обо всех изменениях
Мы видели, что команда rename не отображает никакой информации об изменениях, которые она делает. Итак, если вы хотите получить информацию о команде переименования вы можете использовать флаг «-n», или же флаг «-v», чтобы вывести полную информацию обо всех изменениях, сделанных командой rename.
4. Преобразование регистров (верхний в нижний и наоборот)
Чтобы разом переименовать все файлы с именами написанными нижним регистром в верхний регистр, необходимо:
Нижний регистр в верхний:
Просто используйте следующую команду с выражением perl.
После выполнения вышеуказанной команды вы можете проверить изменения, выполнив «ls -l».
Вы видите, что приведенная выше команда фактически переименовала все имена файлов нижнего регистра (с расширением .HTML) в верхний регистр.
Верхний регистр в нижний:
Аналогично, вы также можете преобразовать все символы верхнего регистра в нижний регистр, используя следующую команду:
5. Перезапись существующих файлов
Если вы хотите принудительно перезаписать существующие файлы, используйте параметр «-f», как показано в примере ниже.
Если вы хотите узнать больше о команде rename, введите «man rename» в терминале.
Команда rename очень полезна, если вы имеете дело с многократным или групповым переименованием файлов из командной строки.
Спасибо за уделенное время на прочтение статьи!
Если возникли вопросы, задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University.
Переименование файлов в Linux
Переименование файлов в Linux можно выполнять средствами графических программ, а также через командную строку. Можно переименовать один файл, а можно сразу группу файлов — массовое переименование. Рассмотрим различные способы, с помощью которых можно переименовывать файлы в Linux.
Переименование командой mv
Команда mv (от слова move) используется для переименования или перемещения файлов и директорий из командной строки.
Синтаксис команды mv очень простой:
источник — файл(ы) или директория, которую необходимо переместить или переименовать.
назначение — файл или директория, в которую будет перемещен источник .
Основные опции:
-f — перезаписывать существующие файлы.
-n — не перезаписывать существующие файлы.
-i — выдавать запрос на перезапись существующих файлов.
-u — не перемещать файлы, которые уже существуют, если существующие файлы новее (время модификации новее).
-v — выводить имя каждого файла перед его переносом.
Как задавать имена файлов и директорий для переименования:
- Чтобы переименовать файл с помощью команды mv нужно в качестве источника задать данный файл, а в качестве назначения указать новое имя файла.
- Если указывается путь до файла, то директории должны совпадать, иначе файл будет перемещен в другую директорию.
- Если в качестве источника указать файл, а в качестве назначения путь до файла в другой директории и задать новое имя файла, то файл будет перемещен в другую директорию и переименован.
- Если в качестве источника указана директория, а в качестве назначения задано новое имя для данной директории, то директория будет просто переименована. Если же директория назначения уже существует, то директория источник будет перемещена в директорию назначения .
Переименование файла
Переименование файла myfile1.dat в файл myfile2.dat:
Переименование файла с указанием пути до файла:
Переименование директории
Переименование директории /home/pingvinus/mydir1 в директорию /home/pingvinus/mydir2 . Справедливо, если /home/pingvinus/mydir2 не существует.
Если /home/pingvinus/mydir2 существует, то, выполнив команду:
директория mydir1 будет перемещена внутрь директории /home/pingvinus/mydir2 . То есть mydir1 будет в результате находиться по адресу /home/pingvinus/mydir2/mydir1 .
Переименование и перемещение
Если в качестве файла назначения указан новый путь и новое имя файла, то файл будет перемещен и переименован. Например, следующая команда перемещает файл myfile1.dat в директорию /home/pingvinus/dir и переименовывает его в myfile2.dat :
Переименование командой rename
Команда rename служит для массового (пакетного) переименования файлов. Она позволяет выполнять замену определенных символов или частей имени файла и использованием Perl-регулярных выражений.
Если вдруг в вашем дистрибутиве нет команды rename , то ее можно установить, выполнив (выберите соответствующую команду для вашего дистрибутива):
Синтаксис команды rename :
старое_имя — регулярное выражение или часть имени файла, которое нужно заменить на новое_имя .
новое_имя — задает результирующее имя файла (может быть регулярным выражением).
Основные опции:
-f — перезаписывать существующие файлы.
-n — вывести список файлов, которые будут переименованы и их новые имена, но не выполнять переименование.
-v — вывести список обработанных файлов.
Проще всего понять, как пользоваться данной командой, на примерах.
Изменение расширения файлов
Массово изменить расширение .html на .php у всех html-файлов.
По умолчанию rename не перезаписывает существующие файлы. Чтобы существующие файлы перезаписывались, используется опция -f :
Замена пробелов на подчеркивание
Заменить все символы пробелов в имени файлов на символ подчеркивания:
Конвертация имен файлов в строчные буквы
Конвертация имен файлов в прописные буквы
Показать, что именно будет переименовано, но не переименовывать
Чтобы избежать ошибок при переименовании файлов, особенно при использовании сложных регулярных выражений, можно сначала вывести список того, что будет переименовано, но не запускать само переименование. Для этого служит опция -n .
Например, мы хотим изменить расширение у файлов с .jpeg на .jpg . Используем опцию -n , чтобы просто вывести какие файлы будут переименованы:
Полное описание команд mv и rename можно получить, выполнив в терминале команды:
Массовое переименование с использованием программ
Для массового переименования файлов можно воспользоваться программами:
Admins SU
Массовое переименование файлов в Linux. 11
Сегодня я продолжу рассказывать об азах Linux. В качестве примера гибкости и удобства, рассмотрим операцию массового переименования файлов. В общем достаточно тривиальная задача, но в Linux ее можно выполнить не одним и даже не двумя способами. Список примеров не претендует на полноту, но общее представление даст. Итак, допустим у нас есть несколько файлов:
Файлы sh мы хотим переименовать в sh.bak. Рассмотрим варианты:
Offtop. Переименовать один файл в Linux:
mv имя-файла1 имя-файла2
Rename
Утилита rename входит в стандартную поставку Debian, так что начнем с нее.
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v отобразить имена успешно переименованных файлов.
-n отобразить список файлов, которые будут переименованы, без переименования в итерации.
-f перезаписать уже существующие файлы.
perlexpr — шаблон для переименования.
Для того, чтобы выполнить переименование файлов согласно условию, выполним команду:
Рассмотрим perlexr подробнее:
s=указывает, что требуется замещение.
/.sh/=Строка, которую будем замещать.
/.sh.bak/ = строка, на которую будем замещать
g=global, будем замещать все найденные вхождения.
С помощью rename можно быстро изменить регистр файлов. Например поднимем регистр файлов из примера:
MMV
mmv — программа для массового перемещения, переименования, копирования, объединения файлов.
По умолчанию она не включена в состав Debian. Поставим ее:
Наша задача решается одной строкой:
MV
Теперь решим нашу задачу стандартной командой mv. Для этого нам прийдется немного попрограммировать в bash.
Попробуем усложить задачу. Например у нас есть куча файлов JPG:
Мы хотим привести их к следующему виду:
Midnight Commander
В любимом многими mc, процесс переименования по маске выполняется просто и непринужденно в два действия.
1. Через + выбираем файлы по маске *.sh
2. Нажимаем F6 и в destination указываем *.sh.bak
Все примеры, приведенные выше, так или иначе работают во всех Linux, BSD, Mac OS, если стоят соответствующие утилиты.
На этом все, спасибо за внимание.
Спасибо, вроде понял, мне интересно можно ли переименовать с помощью команды find, например есть файлы типа ****.log и раскиданные по разным директориям , хотелось бы их переименовать в ***.LOG и оставить в тех же папках.
find / -type f -name ‘*.log’ (я пробовал «-exec mv» не получилось) | while read fname ; do echo mv $fname $
и нечего не выходит, я не могу понять где ошибка.
С linux знакомлюсь, я не администратор и не программист, я человек военный доходит тяжело, повторяйте два раза =)
Это конечно давно было, но я отвечу.
В линухах можно передавать вывод одной команды на обработку другой, делается это вот такой чертой — «|».
Соответственно мы ищем нужные файлы командой find и передаем их на переименование команде rename —
find . -name «*.txt» -print | rename ‘s/.txt/.jpg/g’
Данная команда найдет все txt файлы в текущем (от куда запускали) каталоге и вложенных в него других каталогах и поменяет их на jpg
Для поиска и замены везде-везде нужно указать / вместо точки. Это корневая директория.
Спасибо, немного переделал ваш скрипт с использованием MV чтобы добавить к кеш-у песен из ВК приставку .mp3 Проигрыватель отказывался воспроизводить файлы без расширения.
Оно и всё бы ничего, но что делать, если понадобилось рекурсивно поменять имена файлов и расширений, оставляя их в той же директории, где они лежат + не трогая название папок и файлов, которые не требуют переименования?
На Python я быстро решил эту задачу, а вот как это сделать в Терминале?.
Первым делом я посмотрел структуру (tree), нашел все файлы, которые нужно изменить — find $path* -type f | grep ‘f’
А дальше мой конвейер застрял… Как их рекурсивно обойти?
Вот так выглядят имена файлов и папок
https://cloud.mail.ru/public/EwDL/GckT7eDGe
Там же лежит и мой скрипт на питоне, если кому понадобится
find /path/ -name «*.*?*» -type f -print |rename ‘s/?.*//g’
Спасибо большое! Только -print не срабатывает. Он срабатывает, но только без ренейма. Почему так?
И для чего стоит последний слеш в этом выражении ‘s/?.*//g’ .
Проверил копипастом, однострочник работает. между последними слешами согласно синтаксису перл регэкспа указывается, на что менять. Читается, как заменить содержимое после вопросительного знака вместе с ним на пустоту. Могу помочь подебагить, скайп cucadmuh
Спасибо за помощь! Дебажить нечего.
Я питонист. Там немного другая регулярка(вернее флаги).
Но захотелось поучится пользоваться встроенными скриптами. Ввиду бóльшего удобства и скорости.
Ваше выражение работает отлично. Просто оно не выводит данные (-print) — что и на что он поменяло. Я сначала не понял ничего, т.к. экран ничего не выдал. Думал, что не сработало, но залез в папку и там уже увидел замененное имя. Так что все работает, кроме вывода stdout на экран.
Скрипт с командой mv не работает, если в начальных именах файлов есть пробелы, как это поправить?