Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.
Всем привет. Есть простая задача, переименовать миллион или больше файлов в папке. Как ее решить с помощью bash`а так, чтобы не лопнул кеш системы? Т.е. если я сделаю так
#!/bin/bash
cd /dir
list=`ls`
for file in ${list[@]}; do
mv $file "new_name_"$file
done
то память на серере может закончиться из-за жирной переменной $list.
На python`е это делается с помощью функции xrange(), которая в отличии range() не помещает в память сразу весь список.
find /dir -maxdepth 1 -exec rename '' new_name_ {} +
(на debian вместо rename надо использовать rename.ul)
P. S. Хотя миллион имён файлов — это вряд ли больше нескольких десятков мегабайт. Если ещё и не удваивать этот объём, сохраняя список в переменную, при наличии хотя бы 512М памяти проблем возникнуть не должно.
P. P. S. А если эта задача связана с regexp для указания количества символов в имени файла, то для переименования по регулярному выражению можно использовать prename.