The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск nomenus-rex 0.7.0, утилиты для массового переименования файлов

20.07.2022 17:19

Доступен новый выпуск Nomenus-rex, консольной утилиты для массового переименования файлов. Настраивается с помощью простого конфигурационного файла. Программа написана на C++ и распространяется на условиях GPL 3.0. Со времени предыдущей новости утилита обросла функциональностью, а также исправлены множественные ошибки и недоделки:

  • Новое правило: "дата создания файла". Синтаксис аналогичен правилу Date.
  • Удалено приличное количество "boilerplate" кода.
  • Значительный прирост производительности (приблизительно в 1000 раз быстрее) теста коллизии имён. Этот тест проверяет нет ли среди результирующих имён файлов дубликатов, что при перемещении файлов приведёт к потере данных. Так на тесте с около 21k файлов, время теста сократилось с 18 секунд до 20k микросекунд!
  • Исправлена ошибка в правиле RuleDir для файлов, находящихся на верхнем уровне дерева.
  • Новый параметр e/example для вывода типовой конфигурации с автозаполненными (согласно текущей директории) source/destination полями.
  • Немного эстетических украшательств при выводе пар файлов.
  • Новый параметр для отключения запроса подтверждения перед запуском процессинга. Может быть полезен для скриптов.
  • Добавлен индикатор прогресса выполнения операции.
  • Добавлены различные режимы сортировки перед обработкой (с поддержкой Unicode).
  • Большинство правил теперь покрыты тестами.
  • Для работы со строками задействована библиотека ICU, что должно исправить основные проблемы с Юникодом.


  1. Главная ссылка к новости (https://github.com/ANGulchenko...)
  2. OpenNews: Выпуск nomenus-rex 0.4.0, утилиты для массового переименования файлов
Автор новости: A.Stahl
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/57528-nomenus-rex
Ключевые слова: nomenus-rex
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (57) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Онаним (?), 23:27, 20/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    "на тесте с около 21k файлов, время теста сократилось с 18 секунд до 20k микросекунд"
    Как они смогли перекрёстно проверять 21k имён за 18 секунд? Просто два вложенных цикла с strcmp штoле, хеши не модно?
     
     
  • 2.2, Онаним (?), 23:28, 20/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вопрос снят. Посмотрел коммит. Не, ребята, я мимо. Не вложенные циклы конечно, но...
     
     
  • 3.4, Аноним (4), 23:40, 20/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    можно пожалуйста ссылку для особо ленивых?
     
     
  • 4.8, topin89 (ok), 00:25, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Держи: https://github.com/ANGulchenko/nomenus-rex/commit/6185d5914a4d6d536f630d36f75f
     
     
  • 5.26, pashev.ru (?), 10:12, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Changelog нельзя изменять в одном коммите с кодом. Я запрещаю и проклинаю всех, кто так делает.
     
     
  • 6.27, A.Stahl (ok), 10:46, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    А какая выгода от изменения ченджлога отдельным коммитом от кода, который этот ченджлог описывает?

    Кто-то читает диффы ченджлогов? Ну, в данном случае диффы всегда сверху файла.

     
     
  • 7.33, topin89 (ok), 12:55, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Черри-пикать удобнее. Из-за этого в коммитах лучше держать минимальные изменения, после которых код может компилироваться/выполняться. Ну и временами читать, как код менялся, удобнее по маленьким коммитам.

    Диффы читают на ревью PR'ов. Может не всегда, но время от времени так удобнее.

     
  • 3.9, topin89 (ok), 00:35, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Зря ты так. Видно, что человек учится, набивает шишки. Уже понял, что юникод -- это магия и пусть специальная библиотека с этим возится. Даже понял, что вложенные циклы в 1000 раз хуже, чем использование специальных структур для поиска.

    Зачем делать новость из софта уровня "я сделаль" я не понимаю, но автору кода желаю учиться и развиваться, а также читать документацию. Та же проверка, что вставка в map удалась через проверку размера карты когда тот же insert уже выдаёт, прошла вставка или нет -- это неправильно.

     
  • 2.5, Аноним (5), 23:43, 20/07/2022 [^] [^^] [^^^] [ответить]  
  • –14 +/
    Кто они? Эту шляпу пилит какой-то даун с лора, который думает, что занимается программированием :3
     
     
  • 3.18, Онаним (?), 09:06, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ну я фиг знает, он, она, оно, или их там вообще двое - поэтому они.
     

  • 1.3, Аноним (3), 23:33, 20/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    А я в шелле с помощью "for i in ...; do mv $i $(echo ... | sed 's/.../.../'); done" переименовываю
     
     
  • 2.16, myhand (ok), 06:22, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты поц.

    Главное rename 's/.../.../' * - и никаких C++сов, прости Г-ди.  Аминь.

     
  • 2.19, 1 (??), 09:07, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    тогда уж find . -exec
    А то рекурсивно не получится
     
  • 2.42, InuYasha (??), 16:30, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Дрочево со спецсимволами - в студию! )
     
  • 2.56, Аноним (-), 15:08, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ls/find | xargs
     

  • 1.6, Аноним (5), 23:51, 20/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –12 +/
    Автор, у меня много вопросов. Какой номенус? Какое переименование и покрытие тестами? Ты отдаешь себе отчёт, что пилишь программу, которая заменяется однострочником на баше? Ты поехавший? Когда ты повзрослеешь?
     
     
  • 2.7, Аноним (5), 00:04, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • –18 +/
    Не подумай, что я с наездом. Просто если ты реально поехавший со справкой, то есть тема выбить тебе финансирование в рамках какого-нибудь transparency program для дауничей, в европке такое любят. Оформим тебе полный пансион с трехразовым питанием и тёплым халатом. По вечерам игры в пасьянс и литературный клуб. Вмиг про переименования забудешь!
     

  • 1.10, topin89 (ok), 00:54, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Всем, кто пытается забить программу за ненужность, плохой код и прочее: ну зачем вы так? Все же новичками были. Пусть учится, прогресс есть, хоть и медленный.

    А автору, если он тут внезапно сидит, рекомендую начать учить основы структур и алгоритмов. Хэши там, бинарные деревья с бинарным поиском, самую базу. Посмотреть на распараллеливание, может переименование в несколько потоков быстрее будет. И бенчмарки. Тупо сравнить по скорости конкретное правило с однострочниками на баше. Сравнить с альтернативами, типа perl-rename.

     
     
  • 2.20, Онаним (?), 09:09, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Фак, я даже в фильтре базара под MaNGOS (давно это было) сразу догадался, что надо как минимум деревья выстраивать.
     
     
  • 3.37, topin89 (ok), 14:02, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Фак, я даже в фильтре базара под MaNGOS (давно это было) сразу
    > догадался, что надо как минимум деревья выстраивать.

    Но для этого нужно или учить теорию (что любители делают редко) или чтоб кто-то сказал. Или быть мегаталантом и догадаться о деревьях самому, но шансов лишь слегка больше, чем выиграть в лотерею.

    Я помню, лет десять назад делал нормировку массива чисел на диапазон [0..1] с двумя вложенными циклами. Чтобы догадаться до адекватного варианта мне потребовалась лишь фраза "неэффективно, можно лучше". Такой лёгкий пинок, но без него я бы ещё долго писал код O(N^2) вместо O(N) или даже O(1).

     
  • 2.21, Онаним (?), 09:10, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Не тот ныне студент пошёл, ой не тот ([брюзжит дальше]...)
     

  • 1.11, Ассемблер (?), 01:21, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Я сейчас буду переименовывать все файлы!
     
     
  • 2.13, Аноним (13), 03:16, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А я что-то очкую, как-то на школе привычнее это делать
     
     
  • 3.14, Аноним (13), 03:16, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    *шелле
     
     
  • 4.38, Аноним (38), 15:00, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    По Фрейду
     

  • 1.12, Аноним (12), 03:14, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кстати о файлах. Как скопировать директорию с кучей симлинков вовне этой директории, чтобы эти симлинки не протухли? Или переместить. Этот королевский безменюх так умеет?
     
     
  • 2.15, iCat (ok), 04:17, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    #cp --help
     
     
  • 3.40, Аноним (-), 16:20, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    1. cp --help не копирует файлы
    2. решётка -- это коммент => тем более не копирует
    3. но ты ведь про --preserve=links? Не работает. Она иногда может ругаться в консоль о том, что после копирования ссылка стала висящей. Иногда не ругается, а молча оставляет её висеть.
    4. ты прикинь, я не только в man cp заглядывал, я заглядывал в гугл и искал там способа. я не нашёл. Единственное что работает -- это тупое напрашивающееся костылерешение: после копирования пройтись find'ом по дереву, выбрать все симлинки, прочитать их readlink'ом, удалить, создать заново в исправленном варианте.
    5. Иди умничай перед мамкой своей.
     
     
  • 4.49, iCat (ok), 02:21, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > 2. решётка -- это коммент => тем более не копирует
    > 3. но ты ведь про --preserve=links? Не работает. Она иногда может ругаться
    > в консоль о том, что после копирования ссылка стала висящей. Иногда
    > не ругается, а молча оставляет её висеть.
    > 4. ты прикинь, я не только в man cp заглядывал, я заглядывал
    > в гугл и искал там способа. я не нашёл. Единственное что
    > работает -- это тупое напрашивающееся костылерешение: после копирования пройтись find'ом
    > по дереву, выбрать все симлинки, прочитать их readlink'ом, удалить, создать заново
    > в исправленном варианте.
    > 5. Иди умничай перед мамкой своей.

    Ну вот сколько умных мыслей сразу из тебя прорвалось-то.
    А то завели обыкновение - ставить вопрос таким образом, что из него вообще непонятно что человек спрашивает...
    Теперь почитай вывод команды
    #rsync --help
    И не раздражайся по пустякам - глупо это.

     
     
  • 5.50, Аноним (-), 05:23, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > А то завели обыкновение - ставить вопрос таким образом, что из него вообще непонятно что человек спрашивает

    Отмазывайся теперь

    > #rsync --help

    Может ты сразу перечислишь все хелпы, которые ты считаешь нужным для меня прочитать? Чтобы я мог сразу на все ответить оптом, а не по очереди?

     
     
  • 6.51, iCat (ok), 05:25, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >> А то завели обыкновение - ставить вопрос таким образом, что из него вообще непонятно что человек спрашивает
    > Отмазывайся теперь
    >> #rsync --help
    > Может ты сразу перечислишь все хелпы, которые ты считаешь нужным для меня
    > прочитать? Чтобы я мог сразу на все ответить оптом, а не
    > по очереди?

    "Слона надо есть по кусочку" ;)
    Так ты нашёл как копировать rsync-ом линки?

     
     
  • 7.59, Аноним (-), 23:24, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Так ты нашёл как копировать rsync-ом линки?

    Нет. Там столько букф в мане, что проще find'ом и readlink'ом сделать, как я и делал всегда, чем читать весь этот словесный понос. Или, я вот думаю, ещё проще будет патч на cp из uutils наложить, чтоб тот следил бы за симлинками.

     
  • 2.22, Онаним (?), 09:12, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Симлинк на то и симлинк, что цель ни х**на не знает о том, что он вообще есть.
    Искать все симлинки и править :D
     
     
  • 3.39, Аноним (-), 16:07, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Я имею ввиду обратную ситуацию. Обратное направление ссылок: изнутри копируемого дерева внаружу его.

    mkdir tmp
    pushd .
    cd tmp
    ln -s ../hello/world .
    popd
    mkdir container
    cp -a tmp container/
    ls -l container/tmp
    total 0
    lrwxrwxrwx 1 user group 8 Jul 21 15:58 world -> ../hello/world

    Хотя чтобы всё работало должно быть:
    ls -l container/tmp
    total 0
    lrwxrwxrwx 1 user group 8 Jul 21 15:58 world -> ../../hello/world

     
     
  • 4.61, Онаним (?), 10:06, 24/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Этот вопрос решается куда проще - вместо ../ - абсолютные сцылки.
     
  • 4.62, Онаним (?), 10:07, 24/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Если же у вас ситуация с хитровыделанными .. по отношению к расположению дерева - ну, ни FS, ни копировщик об этом не знают. Так что find/grep/rm/ln в руки :)
     
  • 4.63, Онаним (?), 10:12, 24/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще у меня для себя есть уже много лет хорошее правило по симлинкам: избегать каких-либо относительных симлинков за пределы самодостаточных деревьев. Самодостаточное - это такое, которое определяется одной сущностью (проектом/софтом/...), и соответственно может перемещаться куда-то только целиком.
     

  • 1.17, Непростое кино (?), 07:54, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Только русские такие злые. Программирование это искусство. Так что каждый занимается чем хочет.
     
     
  • 2.23, Онаним (?), 09:12, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Да никто не мешает заниматься. Пиариться-то зачем? Вот пиар на полностью пустом месте - этого да, не отнять.
     
     
  • 3.32, Тот Самый (?), 12:50, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Огромное количество проектов на GitHub написаны исключительно ради строчки со ссылкой в резюме. Их главная задача состоит совсем не в заявленной функциональности (как правило, это пятое колесо), а в увеличении продажной стоимости автора на рынке труда.

    >Пиариться-то зачем?

    Реклама - двигатель торговли.

     

  • 1.24, pashev.ru (?), 09:30, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Утилита массового переименования файлов называется bash с плагинами sed, find, xargs, rename.
     
  • 1.25, Анончик (?), 09:43, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    A.Stahl это вы коллективно вряшным каналом решили набрость?
     
  • 1.28, Косой (?), 11:35, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    жду с нетерпением трудоустройства автора сей нетленки в микрософт
    микрософт - это сила
     
  • 1.34, Аноним (34), 13:46, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ну как бы пусть, пусть. Напишет человек звездолет, намучается за несколько лет его поддерживать, и тогда уже поймет, что однострочник (да, однострочник) на перле дает не меньшую производительность и пишется по памяти проще, чем конфиг к звездолету с помощью документации.
     
  • 1.41, Аноним (41), 16:23, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а зачем массово переименовывают?
     
  • 1.43, InuYasha (??), 16:33, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это мимимшнее и кавайнее GUIшного FlexibleRenamer-а под винду? Скринов бы или примеров использования...
    Вот, 90% моего варианта использование - это вынимание DATETIME из EXIF, MKV и MP4 и запихивание в начало имён файлов. Тут так можно?
     
     
  • 2.45, A.Stahl (ok), 17:39, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, программа не умеет работать с "контейнерами".
     
     
  • 3.52, InuYasha (??), 11:12, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Нет, программа не умеет работать с "контейнерами".

    Ясно. Ну, всё равно интересная прога. А вопрос с метаданными - это извечная дилемма: должна ли утилита знать формат или формат знать утилиту...

     
     
  • 4.53, adolfus (ok), 12:03, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Написано же, что файл -- это последовательность байт (октетов), а также что семантику и формат определяет приложение. Также имя файла никак не связано ни с метаданными (размер, права,...) и, тем более, его содержимым.
     

  • 1.44, Аноним (44), 16:59, 21/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > должно исправить основные проблемы с Юникодом

    Что значит «должно»? Типа код написали, а протестировать забыли? Ну и в целом, в 2022 иметь проблемы с юникодом надо уметь. Софт уровня c:\laba1.

     
     
  • 2.46, A.Stahl (ok), 17:41, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    >Что значит «должно»? Типа код написали, а протестировать забыли?

    Если бы можно было написать такие тесты, которые корректно покрывали бы все случаи, то и багов бы не существовало.

    >в 2022 иметь проблемы с юникодом надо уметь.

    Это легче чем кажется. А Юникод коварней чем кажется.

     
     
  • 3.47, Аноним (44), 18:41, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > Если бы можно было написать такие тесты, которые корректно покрывали бы все случаи, то и багов бы не существовало.

    А все и не надо, для начала достаточно микса из узких и широких.

     
     
  • 4.48, A.Stahl (ok), 19:11, 21/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если у тебя достаточно опыта с Юникодом чтобы предложить хорошие тесты -- предлагай. Программа использует Юникод лишь при смене регистра и сортировке.


     
  • 2.54, adolfus (ok), 12:12, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Проблем с юникодом куча, особенно с LC_COLLATE. Гном, например, вообще не поддерживает. По крайней мере установить LC_COLLATE=C на выдачу списка из файлов в его листбоксах невозможно, соответсвенно, и в приложениях, которые используют его листбоксы, невозможно этого сделать. Пример -- тотже файкрфокс. Попробуйте при сохранении файла в его панели установить произвольную LC_COLLATE.
     
  • 2.60, Аноним (-), 22:49, 23/07/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > в целом, в 2022 иметь проблемы с юникодом надо уметь.

    Чтобы в 2022 иметь проблемы с юникодом, надо работать с юникодом на практике, а не быть мамкиным икспердом. Особенно если речь идёт про имена файлов в unix'е, про которые никто не обещал никогда, что они в юникоде: они произвольный набор байт, про который ядром гарантируется лишь отсутствие символов '\0' и '/' внутри. Пойди попробуй сравни лексикографически два таких набора байт как utf8, когда твой декодер utf8 не может разбить их на символы. Или попробуй вывести их в консольку так, чтобы потом в консольке не надо было бы reset делать.

     

  • 1.55, Anybody (??), 14:53, 22/07/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    ИМХО "автору" сего поделия лучше удался бот, набросавшие минусы тем, кто усомнился его гениальности.
     
     
  • 2.57, Аноним (-), 15:10, 22/07/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Генитальности.

    А по теме - он сам плодит таких ботов с кьютимаркой на попе.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру