переименовать много файлов. (bash)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модератор: SLEDopit

Ответить
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

переименовать много файлов.

Сообщение BigBrother »

Всем привет. Есть простая задача, переименовать миллион или больше файлов в папке. Как ее решить с помощью bash`а так, чтобы не лопнул кеш системы? Т.е. если я сделаю так

Код: Выделить всё

#!/bin/bash
cd /dir
list=`ls`
for file in ${list[@]}; do
mv $file "new_name_"$file
done
то память на серере может закончиться из-за жирной переменной $list.
На python`е это делается с помощью функции xrange(), которая в отличии range() не помещает в память сразу весь список.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переименовать много файлов.

Сообщение Bizdelnick »

find /dir -maxdepth 1 -exec rename '' new_name_ {} +
(на debian вместо rename надо использовать rename.ul)
P. S. Хотя миллион имён файлов — это вряд ли больше нескольких десятков мегабайт. Если ещё и не удваивать этот объём, сохраняя список в переменную, при наличии хотя бы 512М памяти проблем возникнуть не должно.
P. P. S. А если эта задача связана с regexp для указания количества символов в имени файла, то для переименования по регулярному выражению можно использовать prename.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: переименовать много файлов.

Сообщение BigBrother »

Bizdelnick писал(а):
26.02.2016 23:44
P. P. S. А если эта задача связана с regexp для указания количества символов в имени файла, то для переименования по регулярному выражению можно использовать prename.

нет, не связана, но в работе такое может легко встретиться. Что за prename? Нет такой опции у find`а и команды в системе.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: переименовать много файлов.

Сообщение Bizdelnick »

man prename
В debian та же команда известна как rename.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить