1.1, Аноним (1), 09:19, 05/04/2022 [ответить] [﹢﹢﹢] [ · · · ]
| –2 +/– |
А смысл городить тысячи строк на С++, когда для каждого конкретного
случая на коленке можно смастерить что-то типа
#!/bin/sh
for dict in 'ls *[0-9]'; do
dict_name='echo $dict| sed 's/download?id=//''
echo $dict_name.mp3
mv "$dict" $dict_name.mp3
done
| |
|
|
3.12, ИмяХ (?), 10:48, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
Эта "портянка" в несколько раз меньше конфига в новости.
| |
|
4.30, Аноним (30), 01:43, 06/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
Так у нее и функциональность меньше. И скорость работы вероятно тоже.
| |
|
|
2.3, A.Stahl (ok), 09:25, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
Я не умею красиво писать о простых вещах. Загугли "unixway". Уверен кто-то описал это лучше чем я. Кратко: хорошо иметь программы, выполняющие одну конкретную и внятную функцию, а не писать на каждый чих одноразовые велосипеды.
| |
|
3.4, Аноним (1), 09:45, 05/04/2022 [^] [^^] [^^^] [ответить]
| –1 +/– |
Ну не знаю, мне всегда казалось, что применение сочетания мелких утилит типа ls/mv/sed/awk для решения таких задач как массовое переименование и есть unixway, а не создание отдельной утилиты для каждой задачи.
| |
3.5, Аноним (5), 09:45, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
> выполняющие одну конкретную и внятную функцию
> copy_or_rename = "copy";
____
> на каждый чих одноразовые велосипеды
Ну смотри. Есть такая реальная задача. Имеем следующие файлы:
torrents/<TORRENT_ID>/**/*.{mp4,mkv,...}
Их нужно не скопировать, а организовать на них симлинки и класть их сюда:
videos/<VIDEO_HEIGHT_IN_PIXELS>_<FILENAME>.<EXT>
Как, если не "одноразовыми велосипедами", такое организовать? Если идти по пути "юниксвея" (на самом деле нет), то в сабж придется добавлять поддержку ffmpeg. И поддержку симлинков. А опция наверное будет называться copy_or_rename_or_symlink.
| |
|
4.6, Аноним (6), 09:53, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
> А опция наверное будет называться copy_or_rename_or_symlink
не проще разделить на три? разделяй и властвуй, как говорится
| |
4.7, A.Stahl (ok), 09:59, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
Да, программы не приспособлены для решения очень необычных задач. Тут пользователь сам по себе. Впрочем никто не запрещает создать "правило", вызывающее какую-то внешнюю утилиту как раз для таких нестандартных случаев.
>А опция наверное будет называться copy_or_rename_or_symlink.
Опция по своей сути -- enum. Если вдруг создание симлинков будет востребованой задачей, то почему нет? Просто переменная будет переименована во что-то более общее, вроде "processing_mode".
| |
|
5.10, Аноним (5), 10:20, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
> создать "правило", вызывающее какую-то внешнюю утилиту как раз для таких нестандартных случаев
суть в том, что правила будут занимать не меньшее число строк, чем пресловутые баш-портянки. Но зато не дадут всей гибкости скриптов. Например, забыл упомянуть, что нужно ставить симлинки не на все видео-файлы, а только на те, что НЕ называются /^proxy_\d+\.avi$/.
> processing_mode
Ну теперь программа явно выполняет не просто "одну конкретную и внятную функцию".
| |
|
6.11, A.Stahl (ok), 10:29, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
>будут занимать не меньшее число строк
Так суть не в количестве строк, а в их тривиальности.
Уверен что тебе будет проще написать 5 строк на русском языке, чем две на клингонско-армянском диалекте.
>Ну теперь программа явно выполняет не просто "одну конкретную и внятную функцию".
Не-а. Всё равно одну прикладную задачу. На задачи следует смотреть с точки зрения пользователя, а не сортировать по сисколлам.
| |
|
|
|
5.9, Аноним (8), 10:06, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
Просто, я сомневаюсь, что это действие нужно выполнять чаще, чем никогда. А если выполнять по завершению загрузки, то однострочник уже написан в любом случае (хотя это и не выглядит очень удобным, но у каждого свои тараканы, я тоже добавляю высоту перед расширением, чтобы отличать файлы с одним именем и разным содержимым).
| |
|
|
|
2.14, Аноним (14), 11:13, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
Очевидно же, что дело в производительности. В вашем скрипте целая куча программ запускается, это создаются процессы, передаются данные. Внутри программы, которая в одном процессе делает все нужные вызовы, ничего этого не происходит.
Однако, у нас есть перл, на котором можно получить те же преимущества, не теряя простоты (может даже еще проще и короче будет). И разница в производительности уже будет не такой огромной. Для задач типа удалить охулиарды файлов частенько использую однострочники вместо конструкций на баше.
| |
|
1.17, Аноним (17), 12:18, 05/04/2022 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
если она на с++, то почему такой наркоманский формат конфига?
не проще ли использовать плейнтекст с секциями, типа
[global]
....
[rule1]
[rule2]
etc
| |
|
2.19, A.Stahl (ok), 12:31, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
С названием вышла история: изначально название было nomen (имя), но все упорно и удивлённо читали его как английское no men. Поэтому я добавил us как наиболее очевидное указание на латынь, а rex уже просто по-приколу.
| |
|
1.20, Аноним (20), 12:50, 05/04/2022 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Зашел в новость с надеждой, что кто-то запилил гуй хотя бы наподобие того, что есть в Thunar, уж молчу про Doublecmd/Totalcmd. А тут изврат какой-то, смысл которого можно выразить примерно так:
for fn in *.png; do mv "$fn" "$(basename "$fn" .png)-renamed.png"; done
Допилить под задачи несложно.
| |
1.21, topin89 (ok), 13:01, 05/04/2022 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
C++ конечно странное решение, ну ладно, скорость там или просто привычка.
С программой есть другая проблема
void RuleFilename::process(std::filesystem::path& name)
{
result = name.stem();
switch (mode)
{
case Mode::lowercase:
{
std::transform(result.begin(), result.end(), result.begin(), ::tolower);
}break;
case Mode::uppercase:
{
std::transform(result.begin(), result.end(), result.begin(), ::toupper);
}break;
case Mode::sic:
{
}break;
}
}
Упор на функцию ::tolower. Эта функция есть в двух вариантах, с локалью и без, и в коде намёка на локаль нет. Добавим сюда, что у строка result -- это строка char'ов, а там или ASCII, или неопределённое поведение, которое может приводить и к вылетанию всей программы (C++ такой C++). Так что русские файлы (а так же французские, греческие, немецкие, японские и мноооого других) могут натурально повалить всю программу. А самое забавное, информация об этом есть прямо в доках к tolower на cppreference, так что автор даже беглое ознакомление не осилил.
Как проект для саморазвития и понимания что к чему -- неплохо, но не для реального использования.
| |
|
2.24, CAE (ok), 15:31, 05/04/2022 [^] [^^] [^^^] [ответить]
| +/– |
Обработка исключений - для трусов :)
Но в целом хороший разбор. Кстати, std::filesystem::path тоже имеет "приятные" подводные камни.
| |
|
1.25, КО (?), 19:06, 05/04/2022 [ответить] [﹢﹢﹢] [ · · · ]
| +1 +/– |
Без вменяемого гуя, эта прога очередная и никому ненужная.
| |
1.29, Онаним (?), 23:10, 05/04/2022 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Файлуха не треснет столько файлов переименовывать, чтобы разница в проиводительности с баш-портянкой стала заметной? Или там рамдиск на пару терабайт с файлами по 1 байту в инодах?
| |
|