Массовое переименование файлов в Linux.
Сегодня я продолжу рассказывать об азах Linux. В качестве примера гибкости и удобства, рассмотрим операцию массового переименования файлов. В общем достаточно тривиальная задача, но в Linux ее можно выполнить не одним и даже не двумя способами. Список примеров не претендует на полноту, но общее представление даст.
Offtop. Переименовать один файл в Linux: mv имя-файла1 имя-файла2
Итак, допустим у нас есть несколько файлов:
myapp.conf myapp.txt myapp.sh whatis.sh
Файлы sh мы хотим переименовать в sh.bak. Рассмотрим варианты:
Rename
Утилита rename входит в стандартную поставку Debian, так что начнем с нее.
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v отобразить имена успешно переименованных файлов.
-n отобразить список файлов, которые будут переименованы, без переименования в итерации.
-f перезаписать уже существующие файлы.
perlexpr — шаблон для переименования.
Для того, чтобы выполнить переименование файлов согласно условию, выполним команду:
rename
Рассмотрим perlexr подробнее:
s=указывает, что требуется замещение.
/.sh/=Строка, которую будем замещать.
/.sh.bak/ = строка, на которую будем замещать
g=global, будем замещать все найденные вхождения.
С помощью rename можно быстро изменить регистр файлов. Например поднимем регистр файлов из примера:
rename ‘y/a-z/A-Z/’ *
MMV
mmv — программа для массового перемещения, переименования, копирования, объединения файлов.
По умолчанию она не включена в состав Debian. Поставим ее:
sudo apt-get install mmv
Наша задача решается одной строкой:
MV
Теперь решим нашу задачу стандартной командой mv. Для этого нам прийдется немного попрограммировать в bash.
Попробуем усложить задачу. Например у нас есть куча файлов JPG:
1234234.jpg e456567657.jpg 234df34.jpg …
Мы хотим привести их к следующему виду:
file1.jpg file2.jpg file3.jpg …
Midnight Commander
В любимом многими mc, процесс переименования по маске выполняется просто и непринужденно в два действия.
- Через + выбираем файлы по маске *.sh
- Нажимаем F6 и в destination указываем *.sh.bak
Все примеры, приведенные выше, так или иначе работают во всех Linux, BSD, Mac OS, если стоят соответствующие утилиты.
На этом все, спасибо за внимание.
Смотрите также
- maybe? Интересная песочница для отладки операций с файлами в скриптах Linux.
- Знакомство с CMake. Часть 1. Установка, CMakeLists.txt, сборка.
- Упрощаем администрирование с etckeeper. Настройка контроля версий конфигов в /etc.
- HTTPS для сайта на WordPress под управлением nginx.
- Тестирование производительности веб серверов. Часть первая. Apache Benchmark (ab).
- ← Предыдущий
- Следующий →
Как сделать массовое переименование файлов в директории?
Здравствуйте всем! У меня снова появился один из легчайших вопросов, над которым я ломаю голову целые сутки. У меня тут появилось задание сделать скрипт, который переименует файлы в определенной директории :
File1
.
File5
В например :
File1_renamed
.
File5_renamed
Я знаю что это можно сделать через suffix , но в том и загвоздка, что как пример мне дано простое переименование файлов с добавлением этого renamed, и надо сделать именно так. Я подумывал вывести список файлов и переименовать их так, но что-то даже представления не имею как это сделать, чтобы изменения повлияли на названия самих файлов в директории, а не просто как вывод в консоль.
- Вопрос задан более трёх лет назад
- 635 просмотров
8 комментариев
Простой 8 комментариев
AmdInDrive @AmdInDrive Автор вопроса
AVKor, man mv и так понятно что -S, но как это сделать для нескольких файлов в указанной директории?
У файлов расширения будут?
но как это сделать для нескольких файлов
Через цикл for например
появилось задание
Задания, кстати, тут нельзя выкладывать.
AmdInDrive @AmdInDrive Автор вопроса
Steven Konrov, нет, у них нет расширения. Цикл for , это указать все файлы которые хочу переименовать? Видимо правила я недочитал, но надеюсь тогда сделают поблажку, что это не полноценное задание, а часть его, которую я просто не понимаю, связанную с чем-то определенным.
AmdInDrive @AmdInDrive Автор вопроса
Так, все, прочитал правила и походу ресурс не для меня вообще, очень много ограничений, обычному студенту не подходит, так что извините кого отвлек.
AmdInDrive,
for file in *; do echo "$_renamed"; done
Эхо меняем на mv, и один аргумент переделываем на два.
for file in *; do mv "$file" "$_renamed"; done
Так, все, прочитал правила и походу ресурс не для меня вообще, очень много ограничений, обычному студенту не подходит, так что извините кого отвлек.
Да что вы, ещё как подходит. Только вопросы по другому надо задавать))
AmdInDrive @AmdInDrive Автор вопроса
Steven Konrov, ваш ответ один из самых лучших, спасибо, теперь все понятно.
AmdInDrive @AmdInDrive Автор вопроса
Steven Konrov, и если не сложно, продублируйте в ответе, чтобы я отметил как решение.
Решения вопроса 1

Виктор Таран @shambler81 Куратор тега Linux
find /var/www/ -type f -exec mv <> <>_renamed \;
find -рекурсивный поиск от заданного каталога и ниже
/var/www - где искать, если в текущем каталоге то можно заменить на .
-type f - только файлы
-exec выполнить с найденным
mv переместить
<> то что найдено в данном случае имя файла
\; - просто закончит команду.
Проверить можно так, вместо переименовывания вы получите просто принт самих команд.
find /var/www/ -type f -exec echo <> <>_renamed \;

Отметить решенным, спасибо кэп.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 3

Для правильного вопроса надо знать половину ответа
rename -e 's/(.*)/$1_renamed/' *
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
AmdInDrive @AmdInDrive Автор вопроса
Спасибо за ответ, учту на будущее ваш вариант решения.

хорошо есть и хорошо весьма
есть много способов как переименовать, вот нагугленные примеры Переименование файлов с помощью find, sed и xargs
конкретно в вашем случае можно сделать так:
ls -1 |awk '' | xargs -n2 mv
с пробелами в названии
ls -1 |awk '' | xargs -n2 mv
Ответ написан более трёх лет назад
Нравится 1 2 комментария
AmdInDrive @AmdInDrive Автор вопроса
Спасибо за ваш ответ, думаю стоит его разобрать на будущее, а пока сделаю попроще.

AmdInDrive, тут ничего сложного
создадим директорию и тестовые файлы в ней
mkdir testdir && cd testdir && touch "File "
здесь мы усложнили и сделали название через пробел(File 1)
вывести список файлов текущей директории по одному на строку
ls -1
File 1
File 2
File 3
выведем имена файлов и их изменённых названий:
awk ''
File 1 File 1_renamed
File 2 File 2_renamed
File 3 File 3_renamed
awk - утилита для обработки текста, здесь берём текущую строку($0) и через пробел прописываем её же но с добавкой($0"_renamed")
но так как в названии файла может быть пробел что впоследствии может вызвать казус при обработке, то лучше предохранится и закавычить входящее и исходящее название файлов
awk ''
"File 1" "File 1_renamed"
"File 2" "File 2_renamed"
"File 3" "File 3_renamed"
переместить/переименовать(mv) файлы из первого столбца во второй
xargs -n2 mv
смотрим результат до фактического переименования, ключ -p в команде xargs
ls -1 |awk '' | xargs -p -n2 mv
mv 'File 1' 'File 1_renamed' .
mv 'File 2' 'File 2_renamed' .
mv 'File 3' 'File 3_renamed' .
ок, всё нормально, выполняем убрав ключ -p
ls -1 |awk '' | xargs -n2 mv
смотрим результат
ls -1
File 1_renamed
File 2_renamed
File 3_renamed
в итоге зная одну из утилит обработки текста awk/sed можно очень легко и гибко переименовывать файлы любой сложности
Как переименовать файл Linux

В операционной системе Linux разобраться порой не так просто, как в Windows. Да, внешним исполнением и расположением элементов она проще – не зря же ей пользуется большинство разработчиков, но порой одно желание переименовать файл может превратиться в полноценное захватывающее путешествие. Я расскажу о нескольких способах, с помощью которых можно переименовать файлы в операционной системе Linux.
В ОС Linux есть несколько действенных способов переименовать файл – через файловый менеджер, командой в командной строке или же сторонней программой. В Linux есть множество разных версий, я же описываю действия на Ubuntu 19.04. Начну с самого простого метода, а к следующим можно переходить в том случае, если первый не сработал.
С помощью файлового менеджера
Файловый менеджер операционной системы Linux очень прост в плане графического интерфейса – все элементы четко упорядочены, ничего лишнего. А переименовать через него какой-либо файл можно следующим образом.
- Открываю приложение и перехожу к папке, в которой расположен нужный файл.
- Навожу курсор на иконку и нажимаю по ней правой кнопкой мыши для вызова контекстного меню. В небольшом списке элементов нахожу пункт «Переименовать» и жму по нему. Или просто использую клавишу F2, но перед этим предварительно кликнув по файлу.

Самый простой и быстрый способ переименовать что-либо – воспользоваться файловым менеджером

Ввожу будущее название файла и кликаю по зеленой кнопке
С помощью терминала
Если переименовать файл вышеуказанным способом не получается (нет доступа или что-то иное), стоит попробовать задействовать Терминал. Это аналог командной строки в ОС Windows, причем и выглядит схоже, только в Linux она используется куда чаще.
Открыть данную утилиту можно двумя способами – нажать на комбинацию клавиш Ctrl + Alt + T или выбрать соответствующую иконку в списке приложений, в папке «Утилиты».

«Терминал» можно найти в списке установленных приложений
Кроме того, чтобы переименовать файлы можно использовать две команды.
Команда mv
Эта команда вообще отвечает за перемещение файлов в директориях компьютера. Но ее можно использовать так, чтобы процесс перемещения прошел в ту же самую папку, но на пути название файла было изменено. Я не буду отходить от темы и подробно вникать в синтаксис и опции команды. Затрону лишь то, что нужно нам – остальные возможности можно рассмотреть позже.
Чтобы переименование файла прошло успешно, для начала в «Терминале» потребуется открыть папку, в которой располагается файл. Даю запрос, у меня он выглядит следующим образом:
«cd /home/ayko/Изображения».
У команды mv есть одна опция «-v» – она показывает все файлы в виде списка. А вот чтобы переименовать один из них, стоит ввести следующую команду:
mv -v «Снимок.png» «Image.png»
Да-да, про форматы файлов тоже забывать не стоит.

Для начала надо открыть папку, и только потом начать переименование – логично, правда?
Проверяю, получилось ли, и обнаруживаю переименованный файл в папке.

Результат проделанной работы – файл успешно переименован
Так как команда -v отвечает за перемещение, то во время переименования можно воспользоваться ее прямым назначением. Приведу пример – перемещу файл из папки «Изображения» в «Документы», попутно проведу процедуру переименования. И в таком случае запрос будет выглядеть следующим образом: mv -v /home/ayko/Изображения/»Снимок.png» /home/ayko/Документы/»Image.png»

И переименовали файл, и переместили его в другую папку
Команда rename
Команда mv подходит только в том случае, если необходимо переименовать только один файл, так еще и попутно переместить его в другую директорию. А если надо переименовать группу файлов или заменить лишь часть имени, рекомендуется воспользоваться именно командой rename.
Но есть одно НО – она может быть изначально не установлена в системе, поэтому в таком случае потребуется ввести команду «sudo apt install rename». Я так и сделала, после этого последовало скачивание данных из сети, установка, и все это отображалось в окне «Терминала».

Если что-то не работает, для начала надо это что-то установить
Воспользуюсь я той же опцией, что использовала при задаче команды mv. В моем примере в папке Изображения есть 8 файлов, которые мне необходимо переименовать.

Вот эти файлы я собираюсь переименовывать
Запускаю утилиту «Терминал» и открываю запрос, ранее указанный мной для открытия папки – «cd /home/ayko/Изображения».
В этой директории во всех изображениях мне надо поменять слово «Снимок» на «Image». Для этого я выдаю следующий запрос:
rename -v ‘s/Снимок/Image/’ *

Открыла папку, ввела команду, а дальше утилита все переименовала так, как нужно
pyRenamer и GPRename
К сожалению, для версии, в которой я работаю, а именно Ubuntu 2019 года, эти программы не оптимизированы. То есть, я не найду репака даже на официальных сайтах, что уже говорить о «Менеджере приложений». Приводить примеры я буду в Ubuntu 16.04 – как понятно из названия, это версия выпуска апреля 2016 года. Вполне допустимо, что в других версиях сборки обе программы будут, но основную информацию я все же укажу.
Открываю менеджер приложений, ввожу запрос «pyRenamer», после чего устанавливаю программу.

Устанавливаю утилиту из «Менеджера приложений»
В итоге в боковой панели у меня появится окошко, и при нажатии на него выходит нужная мне утилита.

Вот так выглядит в боковой панели иконка приложения
Слева в окне отображается дерево файловой системы, а в центральной части – файлы, расположенные в выбранной папке. Ниже уже – панели управления, в которой и проводится настройка. Мне понадобится перейти во вкладку «Images», так как я переименовываю именно изображения. Ввожу во вторую строку будущее имя файла, нажимаю на кнопку «Preview». Рядом с прежним названием появится пример нового, и уже в итоге я жму на кнопку «Rename».

Перехожу ко вкладке «Images», ввожу будущее название файла и завершаю процедуру
В приложении GPRename интерфейс и действия в целом схожи. Только если в рассмотренной мной утилите есть хотя бы пара элементов на русском, то в данном случае программа полностью на английском языке.

Вот так выглядит окно программы GPRename
Заключение
Переименование файлов в операционной системе Linux – несложный процесс и много времени отнимать он не должен. По крайней мере, если пользователь не полез в системные директории, чего делать без надобности настоятельно не рекомендую. Если это группа файлов, лучше просто активировать команду rename и воспользоваться ею. В остальном можно действовать файловый менеджер или «Терминал», к сторонним приложениям прибегать приходится в крайнем случае.
Переименование файлов в Linux

Переименование файлов в Linux можно выполнять средствами графических программ, а также через командную строку. Можно переименовать один файл, а можно сразу группу файлов — массовое переименование. Рассмотрим различные способы, с помощью которых можно переименовывать файлы в Linux.
Переименование командой mv
Команда mv (от слова move) используется для переименования или перемещения файлов и директорий из командной строки.
Синтаксис команды mv очень простой:
mv опции источник назначение
источник — файл(ы) или директория, которую необходимо переместить или переименовать.
назначение — файл или директория, в которую будет перемещен источник .
Основные опции:
-f — перезаписывать существующие файлы.
-n — не перезаписывать существующие файлы.
-i — выдавать запрос на перезапись существующих файлов.
-u — не перемещать файлы, которые уже существуют, если существующие файлы новее (время модификации новее).
-v — выводить имя каждого файла перед его переносом.
Как задавать имена файлов и директорий для переименования:
- Чтобы переименовать файл с помощью команды mv нужно в качестве источника задать данный файл, а в качестве назначения указать новое имя файла.
- Если указывается путь до файла, то директории должны совпадать, иначе файл будет перемещен в другую директорию.
- Если в качестве источника указать файл, а в качестве назначения путь до файла в другой директории и задать новое имя файла, то файл будет перемещен в другую директорию и переименован.
- Если в качестве источника указана директория, а в качестве назначения задано новое имя для данной директории, то директория будет просто переименована. Если же директория назначения уже существует, то директория источник будет перемещена в директорию назначения .
Переименование файла
Переименование файла myfile1.dat в файл myfile2.dat:
mv myfile1.dat myfile2.dat
Переименование файла с указанием пути до файла:
mv /home/pingvinus/myfile1.dat /home/pingvinus/myfile2.dat
Переименование директории
Переименование директории /home/pingvinus/mydir1 в директорию /home/pingvinus/mydir2 . Справедливо, если /home/pingvinus/mydir2 не существует.
mv /home/pingvinus/mydir1 /home/pingvinus/mydir2
Если /home/pingvinus/mydir2 существует, то, выполнив команду:
mv /home/pingvinus/mydir1 /home/pingvinus/mydir2
директория mydir1 будет перемещена внутрь директории /home/pingvinus/mydir2 . То есть mydir1 будет в результате находиться по адресу /home/pingvinus/mydir2/mydir1 .
Переименование и перемещение
Если в качестве файла назначения указан новый путь и новое имя файла, то файл будет перемещен и переименован. Например, следующая команда перемещает файл myfile1.dat в директорию /home/pingvinus/dir и переименовывает его в myfile2.dat :
mv /home/pingvinus/myfile1.dat /home/pingvinus/dir/myfile2.dat
Переименование командой rename
Команда rename служит для массового (пакетного) переименования файлов. Она позволяет выполнять замену определенных символов или частей имени файла и использованием Perl-регулярных выражений.
Если вдруг в вашем дистрибутиве нет команды rename , то ее можно установить, выполнив (выберите соответствующую команду для вашего дистрибутива):
sudo apt install rename sudo yum install prename yaourt -S perl-rename
Синтаксис команды rename :
rename опции ’s/ старое_имя / новое_имя ’ файлы
старое_имя — регулярное выражение или часть имени файла, которое нужно заменить на новое_имя .
новое_имя — задает результирующее имя файла (может быть регулярным выражением).
Основные опции:
-f — перезаписывать существующие файлы.
-n — вывести список файлов, которые будут переименованы и их новые имена, но не выполнять переименование.
-v — вывести список обработанных файлов.
Проще всего понять, как пользоваться данной командой, на примерах.
Изменение расширения файлов
Массово изменить расширение .html на .php у всех html-файлов.
rename 's/.html/.php/' *.html
По умолчанию rename не перезаписывает существующие файлы. Чтобы существующие файлы перезаписывались, используется опция -f :
rename -f 's/.html/.php/' *.html
Замена пробелов на подчеркивание
Заменить все символы пробелов в имени файлов на символ подчеркивания:
rename 'y/ /_/' *
Конвертация имен файлов в строчные буквы
rename 'y/A-Z/a-z/' *
Конвертация имен файлов в прописные буквы
rename 'y/a-z/A-Z/' *
Показать, что именно будет переименовано, но не переименовывать
Чтобы избежать ошибок при переименовании файлов, особенно при использовании сложных регулярных выражений, можно сначала вывести список того, что будет переименовано, но не запускать само переименование. Для этого служит опция -n .
Например, мы хотим изменить расширение у файлов с .jpeg на .jpg . Используем опцию -n , чтобы просто вывести какие файлы будут переименованы:
rename -n 's/\.jpeg$/.jpg/' *
Полное описание команд mv и rename можно получить, выполнив в терминале команды:
man mv man rename
Массовое переименование с использованием программ
Для массового переименования файлов можно воспользоваться программами: