LINUX.ORG.RU

fselect 0.3.1

 , , fselect, ,


6

4

fselect — это консольная утилита для поиска файлов с помощью выражений, напоминающих SQL. В некоторых случаях может заменить традиционный find.

Преимущества:

  • возможность создания сложных запросов с помощью скобок и операторов SQL;
  • поиск по ширине/высоте изображений;
  • поиск внутри zip-архивов;
  • форматирование вывода в CSV, JSON и null-terminated строки.

Пример:

$ fselect "fsize, modified, path from /home/pupseng depth 3 where size >= 1mb and ( name like '%.jpg' or name like '%.png' )"

1.82 MiB	2018-01-16 13:31:59	/home/pupseng/Pictures/Screenshot from 2018-01-16 13:31:46.png	
1.29 MiB	2017-09-05 13:00:02	/home/pupseng/Downloads/Telegram Desktop/image_2017-09-05_12-59-55.png	
2.74 MiB	2017-05-31 12:23:31	/home/pupseng/Downloads/Telegram Desktop/IMG_9514.jpg	
2.25 MiB	2017-07-28 15:57:44	/home/pupseng/Downloads/Telegram Desktop/image_2017-07-28_15-57-35.png	
3.56 MiB	2016-07-04 16:43:13	/home/pupseng/Downloads/fugue.png	
7.15 MiB	2016-10-24 12:25:32	/home/pupseng/Natasha/DCIM6807.jpg	

Утилита написана на языке программирования Rust и в настоящий момент устанавливается с помощью cargo. Крайне приветствуется помощь в организации сборки пакетов для различных дистрибутивов Linux, а также Mac OS.

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



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

Тоже гуд.

А при пакетной обработке, наверное да, sql-like будет удобнее. Но если кодбазу надо регулярно пакетно обрабатывать, что-то тут наверное не так.

Dark_SavanT ★★★★★
()

уж лучше powershell

af5 ★★★★★
()
Ответ на: Ну а я, например, нет. от anonymous

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

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

Я даже поиском на своем компьютере не помню вообще когда последний раз пользовался

А у людей бывают корпоративные хранилища с 100 миллионов файлов. И что делать, когда кончается место, и надо быстренько грохнуть все фильмы и фоточки, замаскированные хитрожопыми сотрудниками под документы и бух. отчетность?

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

fselect 0.3.1 (комментарий)

Уверен, подобных примеров можно привести очень много.

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

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

fselect 0.3.1 (комментарий)

И что делать, когда кончается место, и надо быстренько ...

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

anonymous
()

Как поднатарею в С++ - надо будет переписать.

Не скажу, что прям ждал, но идея выглядит удобнее чем find

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

У которых такая задача появляется те воспользуются find и подобным. Возьмут просто готовый пример с инета и все...

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

Как поднатарею в С++ - надо будет переписать

На PHP ещё перепиши.

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

Пусть переписывает. Потом, может, осилит раст и обратно с плюсов перепишет.

quantum-troll ★★★★★
()

Фотку наташи в студию )

provaton ★★★★★
()

какого размера бинарники у rust-овых программ? надеюсь, не как у go, где hello world 10 мб занимает?

посмотрел exe на гитхабе — 1.3 мб, при размере find — меньше 200 кб, но возможно дело в винде.

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

Это ты еще лисповые бинарники не видел. Там уже за сотню мег заходит.

Bobby_
()

Не %.png, a %\.png

[test] touch file.png filepng
[test] ls
filepng  file.png
[test] fselect "path from `pwd` where name like '%.png'" | wc -l
2
[test] fselect "path from `pwd` where name like '%\.png'" | wc -l
1
[test]
LittleBin
()
Ответ на: комментарий от netmaniac

твоя гуевая утилита уже на одном миллионе файлов упадет, знаем плавали.

Bobby_
()

grep like будет реализовано?

Infra_HDC ★★★★★
()

Крайне приветствуется помощь в организации сборки пакетов

С ублюдской cargo экосистемой, которая по сути npm, только пакеты и собирать... Тьфу.

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

Как можно жить без find'а?

Можно смело ;)

Deleted
()

Идея не нова. Реализация хромает.

Сделал бы как завещал папаша Мацакис - парсер на https://github.com/lalrpop/lalrpop и получил бы AST сразу на выходе. Конструкции «select from (select ...)» достались бы бесплатно. Потом простейший AST-walking интерпретатор и можно пользоваться. Потом компилять AST, дальше JIT :)

А так портянки в стиле C на расте. Короче слабенько...

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

Писать adhoc парсер руками в 21 веке? Для этой задачи? На Расте? Когда есть готовый инструмент? Да он будет в 20 раз больше по размеру кода. Троллинг не иначе.

anonymous
()

Крайне приветствуется помощь в организации сборки пакетов для различных дистрибутивов Linux

Без вендоринга собирать тухло, тот же OBS в инет cargo не пустит

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

Линкуйте динамически - будет меньше.

Вы не то оптимизируете.

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

Заходишь в папку с проектом, и набираешь cargo vendor и следуешь инструкции. А потом можно все в zip и на билд сервак.

pftBest ★★★★
()

Отличная новость. Нужно!

Odalist ★★★★★
()

типичная приблуда виндузятника - зачем изучать find, когда можно положить на unix-way и запилить свой велосипед с треугольными колесами, зато на реактивной тяге, благо все компоненты доступны бесплатно.

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

Другой юзкейс: приехал я из отпуска, на фотоаппарате куча файлов вида _DESC0646.JPG. Скрипт переименовывает их в формате 2018-03-06 12:27:51.jpg, с учётом часового пояса при необходимости, а также пережимает видео.

Спасибо тебе Господи что я не ржавейчик какой, а обычный седожопый юниксоид! :)))

Симулируем

for n in $(seq 1 9); do TS="20180306121$n"; echo _DESC064$n.JPG  @ $TS; touch -t $TS _DESC064$n.JPG; done; ls -l
Работаем
find . -name "_DESC*.JPG" | while read ff; do  nff=$(stat -c %y $ff | cut -d'.' -f1); mv -v ${ff} "${nff}.jpg"; done; ls -l

ПРОФИТ!

Код под Public Domain, а то сейчас найдутся такие кто увидит нетривиальное :-)))

anonymous
()

Покрутил — великолепная утилита, спасибо!

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

И при чём тут Rust-то? Тебе для консольного манипулирования как раз новый инструмент делают, удобнее `find`, а ты нос воротишь.

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

Очевидно, чтобы набивать время от времени

find . -type f -exec prog "{}" \;

или

find . -type f -print0 | xargs -0 -n 1 -P 4 prog

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

из вима IDE получается местами сильно лучше, чем из любой готовой IDE

Задними местами :-).

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

Кэп. Я знаю, просто если бы вендоринг был уже в репе, то телодвижений было бы раз в n меньше, просто склонил и билд

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

И при чём тут Rust-то?

Не при чём. Я ж не писал что руст - зло (хотя он таки и не добро :) Я писал об их шайке :) Карапузы с линкин парк.

Тебе для консольного манипулирования как раз новый инструмент делают, удобнее `find`, а ты нос воротишь.

Для начала покажи что оно удобнее :)

DISCLAIMER Но я смотрю с колокольни действительно седожопого одмина. Может у йунных синтаксис find-a вызывает боль, а SQL-я - экстаз, мне не понять. Хотя я и пользую обоих :-)

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

Зачем изобретать велосипед? для музыки/фоточек давно уже есть гуевые утилиты которые умеют это все и даже больше

Велосипед очень простой, и написать его быстрее чем найти подходящее гуи и разобраться с его настройками. Особенно если учесть, что с гуи придётся разбираться каждый раз, а скрипт можно оформить так, что его надо только запустить.

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

ПРОФИТ!

Почти так, да, только обычно удобнее сначала скопировать на компьютер, а потом обрабатывать, поэтому время лучше вытаскивать из Exif-тегов. Вот мой вариант:

#!/bin/bash

usage() {
  cat <<END
This program renames image files to creation dates provided by their Exif metadata.
Usage: ${0##*/} [options] {files}
Allowed options:
-t: shift the date by this amount. Format: [+-]hours(:minutes)?
END
}

timeshift=
argv=(`getopt -o 'ht:' -- "$@"`) || exit $?
eval "set -- ${argv[@]}"
while [[ $1 != -- ]]; do
  case $1 in
    -h) usage; exit;;
    -t) timeshift=$2; shift 2;;
  esac
done
shift

if [[ -n $timeshift ]]; then
  if [[ $timeshift =~ ^([+-])([0-9]+(:[0-9]+)?)$ ]]; then
    timeshift=('-globalTimeShift' "${BASH_REMATCH[1]}0:0:0 ${BASH_REMATCH[2]}")
  else
    echo "Invalid time shift specification: \`$timeshift', expected format: [+-]hours(:minutes)?" >&2
    exit 1
  fi
else
  timeshift=()
fi

exiftool '-filename<%d${createdate}%-c.%le' -d '%F %T' "${timeshift[@]}" -progress "$@"
Jini ★★
()

fselect «fsize, modified, path from /home/pupseng depth 3 where size >= 1mb and ( name like '%.jpg' or name like '%.png' )»

проще в гугле запрос сделать «картинки с девками в хорошем качестве»

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

Сила СКУЛя не только в запросах а в индексах. Поглядел я бы на гугл если бы он результаты поиска выдавал на следующий день. Так что результаты замеров времени при поиске в студию.

Вот так и появляется в линуксе всеми ненавистная служба поиска Windows :)

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

Это да, но зато разработчикам теледвижений на порядок больше, если вдруг какие-то из зависимостей обновить понадобится. И размер гита сразу вырастет.

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

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

Я для аналогичной задачи, помнится, лепил скрипт на Перле с применением модуля MP3::Info из CPAN.

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