LINUX.ORG.RU

nomenus-rex 0.6.2 — утилита для массового переименования файлов

 ,


0

1

Nomenus-rex — это консольная утилита для массового переименования файлов. Настраивается с помощью простого конфигурационного файла. Программа написана на C++ и распространяется на условиях GPL 3.0.

Со времени предыдущей новости (nomenus-rex 0.5.2 — утилита для массового переименования файлов) утилита обросла функциональностью, а также исправлены множественные ошибки и недоделки:

  • 0.6.2

    • Значительный прирост производительности (приблизительно в 1000 раз быстрее) теста коллизии имён. Этот тест проверяет нет ли среди результирующих имён файлов дубликатов, что при перемещении файлов приведёт к потере данных. Так на тесте с около 21k файлов, время теста сократилось с 18 секунд до 20k микросекунд!
  • 0.6.1

    • Исправлена ошибка в RuleDir-правиле для файлов, находящихся на верхнем уровне дерева.
  • 0.6.0

    • Новый параметр e/example для вывода типового конфигурационного файла с автозаполненными (согласно текущей директории) полями source/destination.
  • 0.5.3

    • Немного ‘const’ и unique_ptr тут и там.

    • Немного эстетических украшательств при выводе пар файлов.

>>> Подробности



Проверено: maxcom ()
Последнее исправление: cetjs2 (всего исправлений: 2)

Немного эстетических украшательств при выводе пар файлов.

Продолжайте в этом направлении

kto_tama ★★★★★
()
Ответ на: комментарий от imul

Ну да :) Я просто время измерял именно в МИКРОсекундах, поэтому мне было проще именно в них написать. А с бытовой точки зрения мне что милли-, что микро- секунды одинаково чужды. Я не работаю с такими задержками.

Usruser
() автор топика
Ответ на: комментарий от xor2003

?

Result в штатном режиме должен быть пустым.

Usruser
() автор топика
Ответ на: комментарий от Odalist

Ха, ты, наверное, первый пользователь этой программы, которого я не знаю лично :)

Если вдруг нужна какая-то дополнительная функциональность – обращайся.

Usruser
() автор топика
Последнее исправление: Usruser (всего исправлений: 1)
Ответ на: комментарий от Usruser

Если вдруг нужна какая-то дополнительная функциональность – обращайся.

Да, обязательно напишу.

Odalist ★★★★★
()

Что-то не увидел сухой прогонки, чтобы лог был, а реального перемещения файлов небыло.

И еще я так и не понял, как писать правила.

Например, имеется директория с файлами вида:

NNNN-AAAABBBBCCCC.jpg
NNNN_AAAA_BBBB_CCCC.jpg
NNNN-AAAABBBBCCCC.mov

Их надо разложить по отдельным директориям, и присвоить им в них имена со сквозной нумерацией с ведущими нулями:

/dir1/imageNNNNN.jpg
/dir2/imageNNNNN.jpg
/dir2/videoNNNNN.mov

Это можно сделать?

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

Что-то не увидел сухой прогонки, чтобы лог был, а реального перемещения файлов небыло.

Этот лог показывается всегда. В stdout. Потом запрашивается разрешение на выполнение.

Это можно сделать?

/dir1/imageNNNNN.jpg
/dir2/imageNNNNN.jpg

А как узнать что класть в dir1, а что в dir2? Сложная логика не поддерживается. Наоборот – можно. Т.е. программа может пробежаться по вложенным поддиректориям и сложить всё в одну текущую.

Usruser
() автор топика
Последнее исправление: Usruser (всего исправлений: 1)
Ответ на: комментарий от Xintrea

если директории уже существуют, то вот

find | perl -ne '
chomp;
rename($_,sprintf("/dir1/image%05d.jpg",++$i)),next if /regex1/;
rename($_,sprintf("/dir2/image%05d.jpg",++$j)),next if /regex2/;
rename($_,sprintf("/dir2/video%05d.jpg",++$k)),next if /regex3/;
'

если добавить еще 10 строк, будет тебе еще и dry run

dry run есть, но требует приобрести версию Ultra Ultimate Enterprise Edition (с обязательным hardware dongle и запуском сервера лицензий, разрешающим использовать скрипт на не более чем одном компьютере клиента в каждый отдельный момент времени)

a--
()
Последнее исправление: a-- (всего исправлений: 5)

Как в конфиге настроить чтобы все точки в имени стали подчеркиванием, кроме последней, которая перед расширением?

zh_v68
()

нет ли среди результирующих имён файлов дубликатов, что при перемещении файлов приведёт к потере данных.

по другому ни как? например, выдавать сообщение о том, что такой файл уже существует... :о)

sunjob ★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от zh_v68
{
  type        = "filename";
  mode        = "lowercase";
},
{
  type        = "replace";
  what        = ".";
  to          = "_";
}
{
  type        = "extension";
  ext         = "";
  mode        = "lowercase";
}

Как-то так. Берёшь имя, заменяешь все точки и добавляешь расширение.

Usruser
() автор топика
Ответ на: комментарий от sunjob

Я сначала проверяю что ВСЁ хорошо и только потом что-то делаю. Представь ситуацию когда ты move файлы, процесс нополовину закончился и тут программа заявляет что произошёл конфликт имён. А у тебя половина файлов уже переименована. Да и хрен пойми где именно конфликт.

Usruser
() автор топика
Ответ на: комментарий от Usruser

в таких случаях пишут undo log (да его всегда полезно писать) и затем, при необходимости, вручную его исполняют

если твоя программа директорию не лочит (ведь так?), то никакие твои проверки что «все хорошо» до ренейма не смогут предотвратить конфликт, поскольку прямо во время ренейма может появиться конфликтующий файл

a--
()
Последнее исправление: a-- (всего исправлений: 2)
Ответ на: комментарий от a--

Я просто показываю пользователю что я собираюсь делать и спрашиваю у него подтверждение что всё именно так, как он хочет. А потом делаю.

Какой, нафиг, undo? Какое, нахрен, вручную?

Usruser
() автор топика
Ответ на: комментарий от Usruser

Какой, нафиг, undo? Какое, нахрен, вручную?

судя по твоему ответу — ты полный лох; читай что я написал внимательно

a--
()
Последнее исправление: a-- (всего исправлений: 1)
Ответ на: комментарий от a--

Я пишу прикладную программу для выполнения полезных действий, а не трахаюсь с бобром во сне секьюрити-специалиста.

Usruser
() автор топика

А вот у меня был case. Есть куча фоток с телефона, копирнутая в один каталог лаптопа, как они на телефона и были в каталоге ../Camera/DCIM или типа того, а теперь лежат в куче в ~/home/photos_from_smart/

Нужно разложить их по каталогам в соответствии с датами создания (когда было сделано фото), например:

YYYY
 |---MM
      |---DD {файлы}

Я, честно говоря, из описания так и не понял, ваша утилита так может?

beck ★★★★
()
Последнее исправление: beck (всего исправлений: 3)
Ответ на: комментарий от beck

Раскидать по разным поддиректориям можно, но утилита ничего не знает про время создания файлов.

Так что нет, нельзя. Пока, во всяком случае.

Usruser
() автор топика
Ответ на: комментарий от sunjob

Нет, потеря данных невозможна. Как раз для этого и проводится тест. Никаких действий не будет предприниматься до тех пор пока все конфликты не устранены.

Usruser
() автор топика
Ответ на: комментарий от Usruser

понятно

но лог/ундо-лог было бы неплохо иметь (мало-ли)

sunjob ★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)
Ответ на: комментарий от Usruser

Рекомендую допилить возможность определять имена/каталоги целевых файлов по каким-то параметрам (да вот хотя бы даты-времени создания или группы/собственника) исходных.

Задачку, про которую я писал выше, решил за 30 строк на питоне. 🦧

beck ★★★★
()
Ответ на: комментарий от Xintrea

Но ты не сформулировал задачу.

Это можно сделать?

/dir1/imageNNNNN.jpg
/dir2/imageNNNNN.jpg

А как узнать что класть в dir1, а что в dir2?

Usruser
() автор топика

до 20k микросекунд

Если что, это 20ms или 0.02s

CYB3R ★★★★★
()
Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: комментарий от Usruser

Можешь еще одного пользователя такого добавить в список) А еще добавить в ридми описание плясок с бубном вокруг переменных cmake, макоси и homebrew))

bigc ★★
()
Ответ на: комментарий от bigc

описание плясок с бубном вокруг переменных cmake, макоси и homebrew

Ох, я вообще ничего не знаю про Мак и никогда не слышал про homebrew. А что, не собирается?

Usruser
() автор топика
Ответ на: комментарий от Usruser

Я просто показываю пользователю что я собираюсь делать и спрашиваю у него подтверждение что всё именно так, как он хочет. А потом делаю.

Я пишу прикладную программу для выполнения полезных действий, а не трахаюсь с бобром во сне секьюрити-специалиста.

Man race condition.

filosofia
()
Ответ на: комментарий от Usruser

собирается, если захардкожить пути к заголовкам в CMakeLists.txt и потом еще в паре мест самих заголовков)

bigc ★★
()
Ответ на: комментарий от filosofia

Ты меня не за-man-аешь. Ты меня можешь убедить только практическими примерами ситуаций, когда пользователь захочет воспользоваться этой утилитой на директории где файлы создаются\удаляются\переименовываеются часто, регулярно и бесконтрольно пользователю.

Я считаю что «охрана» состояния – не моя зона ответственности.

Usruser
() автор топика
Последнее исправление: Usruser (всего исправлений: 1)
Ответ на: комментарий от Usruser

Юниксвей в том виде как не надо делать.

Если твоя программа не поддерживает контроль целостности и возможность отмены произведенных действий я предпочту ей не пользоваться. Ну или сделаю бекап данных на всякий случай.

А так то вещь нужная! Удачи в развитии и других проектах.

Noob_Linux ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.