Доступен новый выпуск Nomenus-rex, консольной утилиты для массового переименования файлов. Настраивается с помощью простого конфигурационного файла. Программа написана на C++ и распространяется на условиях GPL 3.0. Со времени предыдущей новости утилита обросла функциональностью, а также исправлены множественные ошибки и недоделки:...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=57528
"на тесте с около 21k файлов, время теста сократилось с 18 секунд до 20k микросекунд"
Как они смогли перекрёстно проверять 21k имён за 18 секунд? Просто два вложенных цикла с strcmp штoле, хеши не модно?
Вопрос снят. Посмотрел коммит. Не, ребята, я мимо. Не вложенные циклы конечно, но...
можно пожалуйста ссылку для особо ленивых?
Держи: https://github.com/ANGulchenko/nomenus-rex/commit/6185d5914a...
Changelog нельзя изменять в одном коммите с кодом. Я запрещаю и проклинаю всех, кто так делает.
А какая выгода от изменения ченджлога отдельным коммитом от кода, который этот ченджлог описывает?Кто-то читает диффы ченджлогов? Ну, в данном случае диффы всегда сверху файла.
Черри-пикать удобнее. Из-за этого в коммитах лучше держать минимальные изменения, после которых код может компилироваться/выполняться. Ну и временами читать, как код менялся, удобнее по маленьким коммитам.Диффы читают на ревью PR'ов. Может не всегда, но время от времени так удобнее.
Зря ты так. Видно, что человек учится, набивает шишки. Уже понял, что юникод -- это магия и пусть специальная библиотека с этим возится. Даже понял, что вложенные циклы в 1000 раз хуже, чем использование специальных структур для поиска.Зачем делать новость из софта уровня "я сделаль" я не понимаю, но автору кода желаю учиться и развиваться, а также читать документацию. Та же проверка, что вставка в map удалась через проверку размера карты когда тот же insert уже выдаёт, прошла вставка или нет -- это неправильно.
Кто они? Эту шляпу пилит какой-то даун с лора, который думает, что занимается программированием :3
Ну я фиг знает, он, она, оно, или их там вообще двое - поэтому они.
А я в шелле с помощью "for i in ...; do mv $i $(echo ... | sed 's/.../.../'); done" переименовываю
Ты поц.Главное rename 's/.../.../' * - и никаких C++сов, прости Г-ди. Аминь.
тогда уж find . -exec
А то рекурсивно не получится
Дрочево со спецсимволами - в студию! )
ls/find | xargs
Автор, у меня много вопросов. Какой номенус? Какое переименование и покрытие тестами? Ты отдаешь себе отчёт, что пилишь программу, которая заменяется однострочником на баше? Ты поехавший? Когда ты повзрослеешь?
Не подумай, что я с наездом. Просто если ты реально поехавший со справкой, то есть тема выбить тебе финансирование в рамках какого-нибудь transparency program для дауничей, в европке такое любят. Оформим тебе полный пансион с трехразовым питанием и тёплым халатом. По вечерам игры в пасьянс и литературный клуб. Вмиг про переименования забудешь!
Всем, кто пытается забить программу за ненужность, плохой код и прочее: ну зачем вы так? Все же новичками были. Пусть учится, прогресс есть, хоть и медленный.А автору, если он тут внезапно сидит, рекомендую начать учить основы структур и алгоритмов. Хэши там, бинарные деревья с бинарным поиском, самую базу. Посмотреть на распараллеливание, может переименование в несколько потоков быстрее будет. И бенчмарки. Тупо сравнить по скорости конкретное правило с однострочниками на баше. Сравнить с альтернативами, типа perl-rename.
Фак, я даже в фильтре базара под MaNGOS (давно это было) сразу догадался, что надо как минимум деревья выстраивать.
> Фак, я даже в фильтре базара под MaNGOS (давно это было) сразу
> догадался, что надо как минимум деревья выстраивать.Но для этого нужно или учить теорию (что любители делают редко) или чтоб кто-то сказал. Или быть мегаталантом и догадаться о деревьях самому, но шансов лишь слегка больше, чем выиграть в лотерею.
Я помню, лет десять назад делал нормировку массива чисел на диапазон [0..1] с двумя вложенными циклами. Чтобы догадаться до адекватного варианта мне потребовалась лишь фраза "неэффективно, можно лучше". Такой лёгкий пинок, но без него я бы ещё долго писал код O(N^2) вместо O(N) или даже O(1).
Не тот ныне студент пошёл, ой не тот ([брюзжит дальше]...)
Я сейчас буду переименовывать все файлы!
А я что-то очкую, как-то на школе привычнее это делать
*шелле
По Фрейду
Кстати о файлах. Как скопировать директорию с кучей симлинков вовне этой директории, чтобы эти симлинки не протухли? Или переместить. Этот королевский безменюх так умеет?
#cp --help
1. cp --help не копирует файлы
2. решётка -- это коммент => тем более не копирует
3. но ты ведь про --preserve=links? Не работает. Она иногда может ругаться в консоль о том, что после копирования ссылка стала висящей. Иногда не ругается, а молча оставляет её висеть.
4. ты прикинь, я не только в man cp заглядывал, я заглядывал в гугл и искал там способа. я не нашёл. Единственное что работает -- это тупое напрашивающееся костылерешение: после копирования пройтись find'ом по дереву, выбрать все симлинки, прочитать их readlink'ом, удалить, создать заново в исправленном варианте.
5. Иди умничай перед мамкой своей.
>[оверквотинг удален]
> 2. решётка -- это коммент => тем более не копирует
> 3. но ты ведь про --preserve=links? Не работает. Она иногда может ругаться
> в консоль о том, что после копирования ссылка стала висящей. Иногда
> не ругается, а молча оставляет её висеть.
> 4. ты прикинь, я не только в man cp заглядывал, я заглядывал
> в гугл и искал там способа. я не нашёл. Единственное что
> работает -- это тупое напрашивающееся костылерешение: после копирования пройтись find'ом
> по дереву, выбрать все симлинки, прочитать их readlink'ом, удалить, создать заново
> в исправленном варианте.
> 5. Иди умничай перед мамкой своей.Ну вот сколько умных мыслей сразу из тебя прорвалось-то.
А то завели обыкновение - ставить вопрос таким образом, что из него вообще непонятно что человек спрашивает...
Теперь почитай вывод команды
#rsync --help
И не раздражайся по пустякам - глупо это.
> А то завели обыкновение - ставить вопрос таким образом, что из него вообще непонятно что человек спрашиваетОтмазывайся теперь
> #rsync --help
Может ты сразу перечислишь все хелпы, которые ты считаешь нужным для меня прочитать? Чтобы я мог сразу на все ответить оптом, а не по очереди?
>> А то завели обыкновение - ставить вопрос таким образом, что из него вообще непонятно что человек спрашивает
> Отмазывайся теперь
>> #rsync --help
> Может ты сразу перечислишь все хелпы, которые ты считаешь нужным для меня
> прочитать? Чтобы я мог сразу на все ответить оптом, а не
> по очереди?"Слона надо есть по кусочку" ;)
Так ты нашёл как копировать rsync-ом линки?
> Так ты нашёл как копировать rsync-ом линки?Нет. Там столько букф в мане, что проще find'ом и readlink'ом сделать, как я и делал всегда, чем читать весь этот словесный понос. Или, я вот думаю, ещё проще будет патч на cp из uutils наложить, чтоб тот следил бы за симлинками.
Симлинк на то и симлинк, что цель ни х**на не знает о том, что он вообще есть.
Искать все симлинки и править :D
Я имею ввиду обратную ситуацию. Обратное направление ссылок: изнутри копируемого дерева внаружу его.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
Этот вопрос решается куда проще - вместо ../ - абсолютные сцылки.
Если же у вас ситуация с хитровыделанными .. по отношению к расположению дерева - ну, ни FS, ни копировщик об этом не знают. Так что find/grep/rm/ln в руки :)
Вообще у меня для себя есть уже много лет хорошее правило по симлинкам: избегать каких-либо относительных симлинков за пределы самодостаточных деревьев. Самодостаточное - это такое, которое определяется одной сущностью (проектом/софтом/...), и соответственно может перемещаться куда-то только целиком.
Только русские такие злые. Программирование это искусство. Так что каждый занимается чем хочет.
Да никто не мешает заниматься. Пиариться-то зачем? Вот пиар на полностью пустом месте - этого да, не отнять.
Огромное количество проектов на GitHub написаны исключительно ради строчки со ссылкой в резюме. Их главная задача состоит совсем не в заявленной функциональности (как правило, это пятое колесо), а в увеличении продажной стоимости автора на рынке труда.>Пиариться-то зачем?
Реклама - двигатель торговли.
Утилита массового переименования файлов называется bash с плагинами sed, find, xargs, rename.
A.Stahl это вы коллективно вряшным каналом решили набрость?
жду с нетерпением трудоустройства автора сей нетленки в микрософт
микрософт - это сила
Ну как бы пусть, пусть. Напишет человек звездолет, намучается за несколько лет его поддерживать, и тогда уже поймет, что однострочник (да, однострочник) на перле дает не меньшую производительность и пишется по памяти проще, чем конфиг к звездолету с помощью документации.
а зачем массово переименовывают?
Это мимимшнее и кавайнее GUIшного FlexibleRenamer-а под винду? Скринов бы или примеров использования...
Вот, 90% моего варианта использование - это вынимание DATETIME из EXIF, MKV и MP4 и запихивание в начало имён файлов. Тут так можно?
Нет, программа не умеет работать с "контейнерами".
> Нет, программа не умеет работать с "контейнерами".Ясно. Ну, всё равно интересная прога. А вопрос с метаданными - это извечная дилемма: должна ли утилита знать формат или формат знать утилиту...
Написано же, что файл -- это последовательность байт (октетов), а также что семантику и формат определяет приложение. Также имя файла никак не связано ни с метаданными (размер, права,...) и, тем более, его содержимым.
> должно исправить основные проблемы с ЮникодомЧто значит «должно»? Типа код написали, а протестировать забыли? Ну и в целом, в 2022 иметь проблемы с юникодом надо уметь. Софт уровня c:\laba1.
>Что значит «должно»? Типа код написали, а протестировать забыли?Если бы можно было написать такие тесты, которые корректно покрывали бы все случаи, то и багов бы не существовало.
>в 2022 иметь проблемы с юникодом надо уметь.
Это легче чем кажется. А Юникод коварней чем кажется.
> Если бы можно было написать такие тесты, которые корректно покрывали бы все случаи, то и багов бы не существовало.А все и не надо, для начала достаточно микса из узких и широких.
Если у тебя достаточно опыта с Юникодом чтобы предложить хорошие тесты -- предлагай. Программа использует Юникод лишь при смене регистра и сортировке.
Проблем с юникодом куча, особенно с LC_COLLATE. Гном, например, вообще не поддерживает. По крайней мере установить LC_COLLATE=C на выдачу списка из файлов в его листбоксах невозможно, соответсвенно, и в приложениях, которые используют его листбоксы, невозможно этого сделать. Пример -- тотже файкрфокс. Попробуйте при сохранении файла в его панели установить произвольную LC_COLLATE.
> в целом, в 2022 иметь проблемы с юникодом надо уметь.Чтобы в 2022 иметь проблемы с юникодом, надо работать с юникодом на практике, а не быть мамкиным икспердом. Особенно если речь идёт про имена файлов в unix'е, про которые никто не обещал никогда, что они в юникоде: они произвольный набор байт, про который ядром гарантируется лишь отсутствие символов '\0' и '/' внутри. Пойди попробуй сравни лексикографически два таких набора байт как utf8, когда твой декодер utf8 не может разбить их на символы. Или попробуй вывести их в консольку так, чтобы потом в консольке не надо было бы reset делать.
ИМХО "автору" сего поделия лучше удался бот, набросавшие минусы тем, кто усомнился его гениальности.
Генитальности.А по теме - он сам плодит таких ботов с кьютимаркой на попе.