LINUX.ORG.RU

Smart mv

 , ,


1

1

Привет! Наваял небольшую программу для собственных нужд, но вдруг и кому нибудь будет полезно, зацените!

В работе системного администратора часто бывают ситуации когда необходимо переименовать файл по его определенным критериям, например использовать часть его имени, дату изменения, хэш и т.п., для этих целей и создана эта программа. Принцип ее работы очень простой: имя файла передается хелперу (вспомогательной программе) которая в stdout пишет текст, затем smv разбивает его на слова которые используются в дальнейшем как символы подстановки в шаблоне имени результирующего файла.

Примеры :

Перемещение файла в каталог формата yyyy/mm/dd в зависимости от времени изменения файла:

smv -ph "stat -c %y" filename %1,1,4%/%1,6,2%/%1,9,2%/%0

переименовать все файлы с расширением .txt в md5 хэш:

smv -h md5sum "*.txt" %1%$

Скрипт перемещения *.txt файлов по каталогам год/месяц изменения файла:

#!/bin/sh

wd=/home/samba/all-msg/arc
/usr/local/bin/smv -ph 'stat -c %y' $wd/'*.txt' $wd/%1,1,4%/%1,6,2%/%0

Более полную информацию можно посмотреть на https://github.com/wellcomer/smv , там есть README, где всё более детально расписано, если будет интересно.



Последнее исправление: wellcomer (всего исправлений: 1)

Ответ на: комментарий от futurama

Не думаю что написать %1 или %2 сложнее чем выучить перл :)

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

what had been seen cannot be unseen

  • >set(CMAKE_CXX_STANDARD 11)

    main.c

  • муть с лицензиями вместо diropen
  • копипаста со всего интернета для тривиальных вещей (кстати, ведь нельзя просто взять и скопипастить произвольный код из интернета в GPL-продукт, особенно в GPL3?)
  • не работает вне utf8-локали
  • КРИВОЙ shell escape
  • CMAKE_CXX_STANDARD 11 и при этом убогая возня с недостроками

Резюме: не пиши на C, тем более системных утилит.

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

CMAKE_CXX_STANDARD 11 там вообще не нужен, это верно.

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

всё очень плохо

Deleted
()
Ответ на: комментарий от futurama

И что это проще чем

smv -h md5sum "*.txt" %1%$ 

%1 - первое слово stdout md5sum
%$ - расширение файла
?

И никаких регулярок, а каково тем кто перл не знает?

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

Х.з. как в rename но в баше просто:

for f in *.txt; do hash=`md5 -q $f`; mv $f $hash; done;

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

Выглядит страшновато, согласен, но если знать что stdout хелпера разбивается на слова, то %1, %2, %3, %4 это и есть номер слова, а после слова, после запятой всего лишь идет смещение внутри слова (опционально) то вот и весь формат.

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

Всё что после последней точки (включая её), в данном случае .gz

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

Но это не мешает сделать к примеру так:

smv -h md5sum "*.tar.gz" %1.tar.gz
wellcomer
() автор топика

Ждём ебилдов.

anonymous
()

%1,1,4%/%1,6,2%/%1,9,2%/%0

Не, спасибо, я лучше сразу perl выучу. Всяко полезнее будет.

anonymous
()

кроме mv есть еще (как минимум) cp и ln

anonymous
()
Ответ на: комментарий от wellcomer

а каково тем кто перл не знает?

Во-первых до уровня для такого задания перл осиливается за вечер.

Во-вторых покажи пример с расчетом sha256 например.

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

сильно сомневаюсь, из-за легаси разве что

anonymous
()

очередное доказательство мощи и лаконичности крестов: фунции utf8len, utf8index, дальше уже не читал. давайте, боги си, расскажите еще разок о своей эффективности, о ресурсах и байтах, обо всем вот этом в наших ненужно-пистонах и прочем, давайте же.

anonymous
()

А как переименовать все *.txt во все *.dat? Вот виндовый move так умеет, вроде бы. Неужели нужно писать обрезатель на седе для такой типичной задачи?

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

Да, с рекурсией интересно, можно написать свой хелпер в пару строчек, который будет выводить путь к файлу и его md5 хэш, тогда это можно будет использовать в smv как %1/%2, но это не универсально. Я думаю добавить переменную «путь к файлу» для этих целей.

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

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

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