1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/code4everything-hutool-cli

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Добро пожаловать в мир нашего нового инструмента для повышения эффективности работы на рабочем столе!

Добро пожаловать в RunFlow!

RunFlow — это инструмент, который можно запускать в терминале. Он основан на Hutool, библиотеке инструментов Java, которая предоставляет множество статических методов для повышения производительности разработчиков.

Hutool-cli позволяет выполнять статические методы Hutool непосредственно из командной строки, что делает разработку более эффективной. Например, вы можете легко сгенерировать случайный UUID, просто выполнив команду:

hu uuid
# output: 483cc7fc-4b22-4188-8f1c-dc1ce4b6d3ee

И это только начало! В RunFlow есть ещё много функций, которые ждут вас.

Встроенные команды

  • Просмотр прогресса времени:

    hu dayp
    
    # output:
    辛丑牛年 五月初三 周六 2021-06-12 09:45:07.755
    
    今日 [oooooooooooooooooooooooooooooooooooooooo                                                            ]: 40.63%
    本周 [oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo                        ]: 76.79%
    本月 [oooooooooooooooooooooooooooooooooooooooo                                                            ]: 40.00%
    本年 [oooooooooooooooooooooooooooooooooooooooooooo                                                        ]: 44.66%
  • Список файлов в каталоге:

    hu ls
    
    # output:
    2021-05-30 00:46:38       0 bin
    2021-06-02 19:48:08       0 external
    2021-06-12 10:29:19    4 KB method
    2021-06-25 19:26:38 4.21 KB class.json
    2021-06-25 19:27:11 8.06 KB command.json
    2021-06-12 10:29:19   749 B converter.json
    2021-06-09 22:19:07   165 B external.conf
    2021-06-24 22:15:32  7.2 MB hutool.jar
  • Просмотр календаря:

    hu calendar 202106
    
    # output:
      2021-06-25    
    Mo Tu We Th Fr Sa Su
       1  2  3  4  5  6
    7  8  9 10 11 12 13
    14 15 16 17 18 19 20
    21 22 23 24 25 26 27
    28 29 30               
    
    # also support like follow command: 
    # hu calendar 6
    # hu calendar 2020
    # hu calendar 202101,2,3,4,5
    # hu calendar 6,7,8
  • Дерево файлов:

    hu tree
    
    # output:
    ├─bin
    | └─hu.exe
    ├─external
    ├─method
    ├─class.json
    ├─command.json
    ├─converter.json
    ├─external.conf
    └─hutool.jar
  • Обратный отсчёт:

    hu countdown 123456789 ms
    # 时间单位可以参考最下方的对照表
    
    # output:
    1天10小时17分36秒789毫秒

Установка ZIP-пакета

Для использования RunFlow вам потребуется следующее:

— git;

— Java 8+.

Чтобы установить RunFlow, выполните следующие шаги:

  1. Скачайте проект с помощью команды:

    git clone https://gitee.com/code4everything/hutool-cli.git
  2. Загрузите соответствующий ZIP-пакет (http://share.qiniu.easepan.xyz/tool/hutool/hu-1.5.zip) и распакуйте его. Структура каталога будет выглядеть следующим образом:

    ├─bin
    | ├─hu
    | ├─hu-mac
    | └─hu.exe
    └─hutool.jar
  3. После распаковки ZIP-файла переместите файлы hutool.jar и содержимое каталога bin в каталог hutool-cli/hutool. Структура каталога должна выглядеть так:

    ├─bin
    │ └─hu(.exe)
    └─hutool.jar
  4. Переместите файл hu(.exe) в зависимости от вашей платформы:

    • Windows: hu.exe;
    • Linux: hu;
    • macOS: hu-mac (после перемещения переименуйте в hu).

Установка из исходного кода

Также можно использовать исходный код для обновления файла hutool.jar. Если у вас уже есть каталог bin, то нет необходимости загружать ZIP-файл.

Выполните следующие действия:

  1. Получите последнюю версию кода с помощью команды git pull.

  2. Выполните команду gradle pack -x test для создания исполняемого JAR-файла. Вам потребуется среда Java.

  3. Выполните команду gradle install -x test, чтобы создать двоичный исполняемый файл для вашей платформы (hu(.exe)) и установить его. Вам потребуется среда Go.

Обратите внимание, что -x test означает пропуск тестовых случаев.

Настройка среды

Создайте переменную среды HUTOOL_PATH, указав путь к каталогу hutool-cli/hutool со следующей структурой:

├─bin
│ └─hu(.exe)
└─hutool.jar

Добавьте каталог bin в переменную PATH вашей системы.

Использование

Просмотр доступных команд

Чтобы просмотреть доступные команды, введите:

hu

# output:
Usage: hutool-cli [options]
  Options:
    -r, --run, --command
      命令模式,命令(类方法别名)可以精确的定位到静态方法,-r指令可缺省
    -c, --class
      类名称(自动加前缀:cn.hutool.)
    -m, --method
      方法名
    -t, --type
      参数类型(非必须,缺失时可能导致无法精确的定位方法)
    -p, --param, --parameter
      方法需要的参数
    -y, --yank, --copy
      是否将结果复制到剪贴板
    -a, --auto-param
      将剪贴板字符串内容注入指定索引位置的参数
    -v, --version
      查看当前版本
    -d, --debug
      是否开启调试模式

Проверка версии

Введите следующую команду, чтобы проверить текущую версию:

hu -v
# output: hutool-cli: v1.2

Выполнение метода

Введите команду для выполнения метода:

hu -c cn.hutool.core.util.IdUtil -m randomUUID
# output: 3214683f-55c1-412e-8b7a-454c57468d99

hu -r cn.hutool.core.codec.Base64#encode -t java.lang.CharSequence -p hutool-cli
# output: aHV0b29sLWNsaQ==

Использование псевдонимов для выполнения методов

Введите команду с использованием псевдонима для выполнения метода:

hu -c base64 -m encode -p 'sky is blue'
# output: c2t5IGlzIGJsdWU=

hu -r encode64 'sky is blue' -y
# output: c2t5IGlzIGJsdWU=
# 说明:-y 表示将输出结果复制到剪贴板

hu -r decode64 -a:0
# output: sky is blue
# 说明:-a:0 表示将剪贴板字符串内容注入到索引位置是0的参数中

# v1.2新功能:支持连续执行,符号 // 分隔多个命令,\\0表示将第一个执行结果作为参数注入,\\1表示将第二个执行结果作为参数注入,依次类推
hu encode64 'test multi cmd' // decode64 \\0
# output: test multi cmd
``` Это можно опустить, как в примере выше для генерации случайного UUID.

Выполнение JavaScript-скрипта:
```shell
hu eval 5+6+3+22+9999
# output: 10035

Просмотр классов с доступными исполняемыми статическими методами

hu methods regex

# regex — это псевдоним класса cn.hutool.core.util.ReUtil
# output:
contains(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
contains(regex:java.lang.String, content:java.lang.CharSequence)
count(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
count(regex:java.lang.String, content:java.lang.CharSequence)
delAll(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
delAll(regex:java.lang.String, content:java.lang.CharSequence)
delFirst(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
delFirst(regex:java.lang.String, content:java.lang.CharSequence)
delPre(regex:java.lang.String, content:java.lang.CharSequence)
escape(c:char)
escape(current:java.lang.CharSequence)
extractMulti(group:java.util.regex.Pattern, pattern:java.lang.CharSequence, content:java.lang.String)
extractMulti(regex:java.lang.String, content:java.lang.CharSequence, template:java.lang.String)
extractMultiAndDelPre(group:java.util.regex.Pattern, var:cn.hutool.core.lang.Holder, pattern:java.lang.String)
extractMultiAndDelPre(regex:java.lang.String, contentHolder:cn.hutool.core.lang.Holder, template:java.lang.String)
findAll(pattern:java.util.regex.Pattern, content:java.lang.CharSequence, group:int)
findAll(pattern:java.util.regex.Pattern, content:java.lang.CharSequence, group:int, collection:java.util.Collection)
findAll(regex:java.lang.String, content:java.lang.CharSequence, group:int)
findAll(regex:java.lang.String, content:java.lang.CharSequence, group:int, collection:java.util.Collection)
findAllGroup0(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
findAllGroup0(regex:java.lang.String, content:java.lang.CharSequence)
findAllGroup1(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
findAllGroup1(regex:java.lang.String, content:java.lang.CharSequence)
get(pattern:java.util.regex.Pattern, content:java.lang.CharSequence, groupIndex:int)
get(regex:java.lang.String, content:java.lang.CharSequence, groupIndex:int)
getAllGroups(i:java.util.regex.Pattern, startGroup:java.lang.CharSequence, groupCount:boolean)
getAllGroups(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
getFirstNumber(StringWithNumber:java.lang.CharSequence)
getGroup0(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
getGroup0(regex:java.lang.String, content:java.lang.CharSequence)
getGroup1(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
getGroup1(regex:java.lang.String, content:java.lang.CharSequence)
isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
isMatch(regex:java.lang.String, content:java.lang.CharSequence)
replaceAll(content:java.lang.CharSequence, regex:java.lang.String, replacementTemplate:java.lang.String)
replaceAll(e:java.lang.CharSequence, str:java.util.regex.Pattern, pattern:cn.hutool.core.lang.func.Func1)
replaceAll(group:java.lang.CharSequence, var:java.util.regex.Pattern, replacement:java.lang.String)
replaceAll(str:java.lang.CharSequence, regex:java.lang.String, replaceFun:cn.hutool.core.lang.func.Func1)

Версия v1.2 уже поддерживает вывод имён параметров методов.

Просмотр псевдонимов

Просмотр доступных псевдонимов методов (можно точно определить местоположение метода).

hu alias
# эквивалентно: hu -r alias

# output:
assignable  = org.code4everything.hutool.Utils#assignableFrom(sourceClass:java.lang.Class, testClass:java.lang.Class)
between     = cn.hutool.core.date.DateUtil#between(beginDate:java.util.Date, endDate:java.util.Date, unit:cn.hutool.core.date.DateUnit=day)
calc        = org.code4everything.hutool.Utils#calc(expression:java.lang.String, scale:int=0)
class       = org.code4everything.hutool.Utils#parseClassName(className:java.lang.String)
cpuinfo     = cn.hutool.system.oshi.OshiUtil#getCpuInfo()
creditc     = cn.hutool.core.util.CreditCodeUtil#randomCreditCode()
date2ms     = org.code4everything.hutool.Utils#date2Millis(date:java.util.Date)
decode32    = cn.hutool.core.codec.Base32#decodeStr(source:java.lang.String)
decode64    =
``` ```
cn.hutool.core.codec.Base64#decodeStr(source:java.lang.CharSequence)
decodeqr    = cn.hutool.extra.qrcode.QrCodeUtil#decode(qrCodeFile:java.io.File)
download    = cn.hutool.http.HttpUtil#downloadFileFromUrl(url:java.lang.String, destFile:java.io.File)
encode32    = cn.hutool.core.codec.Base32#encode(source:java.lang.String)
encode64    = cn.hutool.core.codec.Base64#encode(source:java.lang.CharSequence)
encode64url = cn.hutool.core.codec.Base64#encodeUrlSafe(source:java.lang.CharSequence)
eval        = cn.hutool.script.ScriptUtil#eval(e:java.lang.String)
fconvert    = cn.hutool.core.util.CharsetUtil#convert(file:java.io.File, srcCharset:java.nio.charset.Charset, destCharset:java.nio.charset.Charset)
fopen       = cn.hutool.core.swing.DesktopUtil#open(e:java.io.File=.)
fr          = cn.hutool.core.io.FileUtil#readUtf8String(file:java.io.File)
ftype       = cn.hutool.core.io.FileUtil#getType(file:java.io.File)
fw          = cn.hutool.core.io.FileUtil#writeUtf8String(content:java.lang.String, file:java.io.File)
get         = cn.hutool.http.HttpUtil#get(urlString:java.lang.String)
grep        = org.code4everything.hutool.Utils#grep(line:java.util.regex.Pattern, pattern:java.util.List)
hex         = cn.hutool.core.util.HexUtil#encodeHexStr(data:java.lang.String)
idcard      = cn.hutool.core.util.IdcardUtil#getIdcardInfo(idcard:java.lang.String)
jinfo       = cn.hutool.system.SystemUtil#props()
lower       = org.code4everything.hutool.Utils#toLowerCase(str:java.lang.String)
lunar       = org.code4everything.hutool.Utils#lunar(date:java.util.Date)
match       = cn.hutool.core.util.ReUtil#isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
md5         = cn.hutool.crypto.SecureUtil#md5(data:java.lang.String)
methods     = org.code4everything.hutool.Utils#outputPublicStaticMethods(className:java.lang.String)
mkdir       = cn.hutool.core.io.FileUtil#mkdir(dir:java.io.File)
ms2date     = cn.hutool.core.date.DateUtil#date(date:long)
now         = cn.hutool.core.date.DateUtil#date()
objectid    = cn.hutool.core.util.IdUtil#objectId()
pinyin      = cn.hutool.extra.pinyin.PinyinUtil#getPinyin(str:java.lang.String)
post        = cn.hutool.http.HttpUtil#post(urlString:java.lang.String, body:java.lang.String={})
qrcode      = cn.hutool.extra.qrcode.QrCodeUtil#generate(content:java.lang.String, width:int=1000, height:int=1000, targetFile:java.io.File)
random      = cn.hutool.core.util.RandomUtil#randomLong(min:long=0, max:long=9223372036854775807)
randomc     = cn.hutool.core.img.ImgUtil#randomColor()
randomd     = cn.hutoot.core.util.RandomUtil#randomDouble(min:double=0, max:double=9223372036854775807)
randompass  = cn.hutool.core.util.RandomUtil#randomString(number:java.lang.String=abcdefghijkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ234567892345678923456789, i:int=16)
randoms     = cn.hutool.core.util.RandomUtil#randomString(length:int=16)
regex       = cn.hutool.core.util.ReUtil#isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
second      = cn.hutool.core.date.DateUtil#currentSeconds()
sha1        = cn.hutool.crypto.SecureUtil#sha1(data:java.lang.String)
sha256      = cn.hutool.crypto.SecureUtil#sha256(data:java.lang.String)
split       = cn.hutool.core.text.CharSequenceUtil#splitTrim(str:java.lang.CharSequence, separator:java.lang.CharSequence=,)
str2unicode = cn.hutool.core.text.UnicodeUtil#toUnicode(str:java.lang.String)
suppers     = org.code4everything.hutool.Utils#getSupperClass(clazz:java.lang.Class)
sysinfo     = cn.hutool.system.oshi.OshiUtil#getSystem()
test        = cn.hutool.core.util.ReUtil#isMatch(pattern:java.util.regex.Pattern, content:java.lang.CharSequence)
unicode2str = cn.hutool.core.text.UnicodeUtil#toString(c:java.lang.String)
upper       = org.code4everything.hutool.Utils#toUpperCase(str:java.lang.String)
uuid        = cn.hutool.core.util.IdUtil#randomUUID()
uuid0       = cn.hutool.core.util.IdUtil#simpleUUID()
week        = cn.hutool.core.date.DateUtil#dayOfWeekEnum(date:java.util.Date)
weekend     = cn.hutool.core.date.DateUtil#endOfWeek(date:java.util.Date)``` Просмотр категории и метода псевдонима: существует два способа.

1. ```shell
hu -c base64 -m alias

Вывод:

  • decode = decodeStr(source:java.lang.CharSequence)
  • encode = encode(source:java.lang.CharSequence)
  • encodeurl = encodeUrlSafe(source:java.lang.CharSequence).
  1. 
    

hu -r date#alias


Вывод:

* between = between(beginDate:java.util.Date, endDate:java.util.Date, unit:cn.hutool.core.date.DateUnit=day)
* ms2date = date(date:java.util.Date)
* now = now()
* second = currentSeconds()
* week = dayOfWeekEnum(date:java.util.Date)
* weekend = endOfWeek(date:java.util.Date).

Мы можем просматривать псевдонимы команд, классов и методов с помощью ключевого слова «alias».

**Перекрытие метода псевдонима**

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

Например, псевдоним метода «md5» определён в файле псевдонима как cn.hutool.crypto.SecureUtil#md5(data:java.lang.String), и он принимает параметр строкового типа. Но теперь мы хотим вычислить MD5-хэш файла. Как это сделать?

Есть два варианта:

1. Определить ещё один псевдоним для вычисления MD5 файла. Недостатком является то, что это приведёт к большому количеству псевдонимов, которые будет трудно запомнить.

2. Перекрыть псевдоним. Синтаксис: hu command@type1,type2 param.

Снова рассмотрим метод md5. Сначала посмотрим, какие у него есть перегрузки:

```shell
hu md5@

Вывод:

  • md5()
  • md5(data:java.io.InputStream)
  • md5(data:java.lang.String)
  • md5(dataFile:java.io.File).

Можно видеть, что этот метод поддерживает ввод файлов. В этом случае мы можем напрямую использовать перекрытие псевдонима следующим образом:

# file — это псевдоним java.io.File
hu md5@file command.json

Вывод: 268f6d715cf4ec191a96b80c29f2449f.

Hu command@ используется для просмотра перегрузок псевдонима.

Значения по умолчанию

В файле псевдонима можно определить значения параметров по умолчанию. При выполнении метода все значения по умолчанию либо отсутствуют, либо присутствуют.

Рассмотрим пример создания двумерного QR-кода:

Просмотр команды генерации QR-кода:

# поиск qrcode, связанного с командой
hu alias qr

Вывод:

  • decodeqr = cn.hutool.extra.qrcode.QrCodeUtil#decode(qrCodeFile:java.io.File)
  • qrcode = cn.hutool.extra.qrcode.QrCodeUtil#generate(content:java.lang.String, width:int=1000, height:int=1000, targetFile:java.io.File=qrcode.png).

Затем выполните:

# этот метод имеет значение по умолчанию, которое может быть полностью опущено
hu qrcode 'qrcode test' /home/test.png

Или не используйте значение по умолчанию:

# хотя у этого метода есть значение по умолчанию, мы можем его не использовать
hu qrcode 'qrcode test' 600 600 /home/test.png.

Пользовательский псевдоним

Псевдонимы могут использоваться для быстрого указания на класс или статический метод. Формат примерно следующий: ключ в JSON будет использоваться в качестве псевдонима, а значение будет включать имя класса, имя метода и требуемые типы параметров метода.

{
    "encode64url": {
        "method": "cn.hutool.core.codec.Base64#encodeUrlSafe",
        "paramTypes": [
            "j.char.seq"
        ]
    },
    "echo": {
        /*@ символ означает всегда анализировать значение параметра по умолчанию*/
        "method": "qe#run(@string=return args,@boolean=false)"
    }
}

Hutool-cli предоставляет множество часто используемых псевдонимов. См. следующие файлы:

  • class.json — псевдонимы имён классов.
  • command.json — псевдонимы команд.
  • base64-util.json — псевдонимы имен методов.

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

Обратите внимание: определение псевдонима имени класса не должно превышать 16 символов.

Версия 1.2 поддерживает определение частных псевдонимов. Определите путь {user.home}/hutool-cli/, формат имени файла и псевдонима такой же, как указано выше, программа сначала прочитает пользовательские частные псевдонимы.

Загрузка внешних классов

Способ 1: создайте каталог external в каталоге, соответствующем HUTOOL_PATH, и скопируйте файлы классов (включая каталоги пакетов) в каталог external, например, класс com.example.Test. external/com/example/Test.class

Метод два, рекомендуемый, заключается в создании файла external.conf в соответствующем каталоге HUTOOL_PATH. В этом файле необходимо определить путь к классам (без указания пути к пакетам), используя разделитель — запятую. Например, если абсолютный путь к классу /home/java/com/examaple/Test.class, то в файле нужно указать путь /home/java.

Файл external.conf поддерживает координаты mvn, но при условии, что в локальном репозитории Maven уже есть соответствующий jar-файл:

// Это комментарий
/path/folder
/path/test.jar
mvn:org.code4everything:wetool-plugin-support:1.6.0

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

Заключение

Если вам понравился проект, не забудьте поставить звезду и добро пожаловать с PR.

Таблица соответствия часто используемых классов и их сокращённых имён

Сокращённое имя Полное имя класса
string java.lang.String
j.char.seq java.lang.CharSequence
file java.io.File
charset java.nio.charset.Charset
date java.util.Date
class java.lang.Class
j.boolean java.lang.Boolean
j.byte java.lang.Byte
j.short java.lang.Short
j.integer java.lang.Integer
j.char java.lang.Character
j.long java.lang.Long
j.float java.lang.Float
j.double java.lang.Double
reg.pattern java.util.regex.Pattern
map java.util.Map
list java.util.List
set java.util.Set

Чтобы проверить правильность сокращения, можно использовать команду hu class и посмотреть на результат. Если hu class j.float возвращает java.lang.Float, а hu class no.class возвращает no.class, то это неверное сокращение имени класса. Этот метод также можно использовать для определения типа класса.

Описание параметров

Формат даты

Преобразователь поддерживает смещение дат. Например, чтобы сдвинуть текущую дату на 5 дней вперёд, используйте команду hu date now+5d. Или чтобы сдвинуть дату на неделю назад, используйте hu date now-7d. Знак «+» означает смещение вперёд, знак «–» — смещение назад. После знака следует формула смещения и единица измерения.

Также можно выполнять операции begin и end с датами. Например, начало сегодняшнего дня: hu date today<d, конец текущей недели: hu date now>w. Символ «<» обозначает операцию begin, символ «>» — операцию end. За ними следует единица измерения.

Существует механизм автоматического дополнения дат. Например, 6-е число текущего месяца можно ввести как hu date 06, а 13-е марта текущего года — как hu date 03-13. Это упрощает ввод данных.

Таблица сокращений дат

Сокращение Описание
now Текущее время
today Начало сегодняшнего дня

Таблица единиц измерения

Единица измерения Описание
ms Миллисекунды
s Секунды
sec Секунды
min Минуты
h Часы
hour Часы
d Дни
day Дни
w Недели
week Недели
m Месяцы
mon Месяцы
month Месяцы
y Годы
year Годы

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Добро пожаловать опробовать наш новый инструмент для повышения эффективности рабочего стола RunFlow, https://myrest.top/myflow Развернуть Свернуть
MIT
Отмена

Обновления (3)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/code4everything-hutool-cli.git
git@api.gitlife.ru:oschina-mirror/code4everything-hutool-cli.git
oschina-mirror
code4everything-hutool-cli
code4everything-hutool-cli
master