Я ищу легкое решение для помощи пользователям, находящим файлы на моем сервере.
Работа командной строки, которую я могу просто использовать, располагается, при необходимости переданный по каналу с командой grep. Однако пользователи не имеют доступа к подсказке и не имеют знания для использования более сложных переданных по каналу команд.
Я экспериментировал с некоторыми поисковыми системами как solr и opensearch, однако они довольно требовательны на обращениях за помощью для Full HD с большим количеством данных, в то время как большинство времен простой поиск имени будет достаточно.
Кто-либо знает сеть gui, который может просто использовать существующий locatedb?
Или другой подход, как легкий searchengine, с низким усилием по установке и требованиями ограниченного ресурса, который использует центральный поисковый дб и предоставляет gui различным платформам?
Обновление, январь 22,2018 :
я наткнулся на mlocate-сеть на GitHub, который соответствует требованиям OP вполне хорошо, хотя испытывает недостаток в способности открыть файлы. Может быть работал вручную или как демон. Согласно README.md, пакет был разработан на Ubuntu 16.04, таким образом, это является довольно недавним с прямо сейчас.
Мини-обновление, 2 февраля
Добавленные двойные кавычки к gnome-open "$TOPEN"
, так, чтобы открытый для гнома получил полный путь файлов, которые имеют пространство.
Обновление № 2, Jan 30:
Согласно просьбе в комментариях, я совершенствовал сценарий и добавил опцию открыть файлы. Все реализовано с zenity, найдите, и открытый для гнома. Похвалите философию Unix передачи по каналу команд в других!
я аннотировал сценарий, таким образом, это должно быть ясно где, что, и как. В снимках экрана я открываю Привет Мировую программу для Java. Сценарий выходит в любой точке, если пользователь нажимает кнопки Cancel/Quit.
примечание Стороны: OP запросил, чтобы приложение было межплатформенным. Насколько я знаю, zenity, открытый для гнома, и располагаюсь, не зависят от присутствия оболочки GNOME. Кроме того, пользователи будут соединяться с его сервером Ubuntu и всеми те работа приложений на Ubuntu независимо от присутствия оболочки GNOME. Другими словами, они собираются быть выполнением сценария в его системе, не их, для определения местоположения файлов.
#!/bin/bash
# Author: Serg
# Description: GUI using zenity for locate utility
# Date: January 30, 2015
# This flag will make popup appear if nothing was found
FOUND=0
# Ask user for input, and store it in USRFILE variable
USRFILE=`zenity --entry --title="SEARCH" --entry-text="Text here" --text="Enter a filename or part of it"`
# if use clicked OK, proceed to this big if statement
if [ $(echo $?) = 0 ]
then
TOPEN=$( ( locate $USRFILE ) | ( zenity --height 450 --width=450\
--list --column "Please wait, I'll display paths to files, if I find any"\
--title "SEARCH RESULTS" --text "Select a file you want to open"\
--height=450 --width=450 --ok-label="Open a file " --cancel-label="Quit" ) )
# FIXME: if user clicks open a file without selecting one, program will crash
# FIXME: selecting a file and hitting enter, brings up "Nothing found" dialog
# If user clicked "Open a file" , gnome-open
# will open it with whatever default
# program is listed for that file-type
if [ $(echo $?) = 0 ]
then
gnome-open "$TOPEN"
fi
# Set flag to true, do not display "Nothing found"
if [ $(echo $?) = 0 ]
then FOUND=1
fi
# If we didn't find anything, display a message
if [ $FOUND != 1 ]
then zenity --info --text="Nothing found"
fi
fi
Получают ввод данных пользователем результаты поиска Дисплея если таковые имеются, мог бы занять одну минуту для загрузки , Открывают выбранный файл
Для предложения о том, как сделать этот сценарий открытым с ярлыком (дважды щелкают), относятся к моему предыдущему обновлению ниже
Обновление № 1, Jan 29: Игнорируйте мое предыдущее сообщение. Я имею, хотя о пути Вы сформулировали проблему: "gui фронтэнд для определения местоположения". На самом деле там существует gui фронтэнд к сценариям, zenity
, и я использовал его для создания чернового наброска сценария, который мог бы быть полезным. Не стесняйтесь изменять его и добавлять функциональность, но на наиболее базовом уровне это, располагаются с gui.
Что касается создания "двойного активируемого по щелчку" сценария относятся здесь
#!/bin/bash
FOUND=0
USRFILE=`zenity --entry --entry-text="Text here" --text="Enter a filename or part of it"`
zenity --info --text " Please wait a little, I'll try to find it "
locate $USRFILE > results.txt && zenity --text-info --html --filename='results.txt'
if [ -e results.txt ]
then FOUND=1
rm results.txt
fi
if [ $FOUND != 1 ]
then zenity --info --text="Nothing found"
fi
существует gnome-search-tool
, с которым я сверился ps
и htop
утилиты, и не требуется слишком многих ресурсов. Можно установить его с sudo apt-get install gnome-search-tool
.
Я сделал свое исследование об этом, узнал этот универсальный инструмент поиска файла, названный Зубатка . Обещание звуков, полностью записанное в Python и полезное, чтобы найти и определить местоположение файлов. Я также нашел GUI
Я знаю, что это довольно старая информация, но я только что задал тот же вопрос о холодном хранилище на Raspberry Pi. Я придумал очень простое решение с CGI, но будьте осторожны - безопасность не является его сильной стороной. Используйте это только для личной системы или частной сети, потому что она созрела для инъекционных атак. Хорошая новость заключается в том, что его можно быстро и легко развернуть, если у вас уже установлен Apache/NGinx.
search.html:
<HTML>
<TITLE>MLocate Web Form</TITLE>
<BODY>
<b>Simple Web Form</b><p>
<FORM ACTION="/cgi-bin/search.cgi" target="resultsframe">
<label for="search">Find</label>
<INPUT TYPE="TEXT" NAME="search" SIZE="50"><BR>
<label for="limit">Limit</label>
<INPUT TYPE="TEXT" NAME="limit" value="10" SIZE="4"><BR>
<INPUT TYPE="SUBMIT" NAME="Find" VALUE="Find">
</FORM>
<iframe name="resultsframe" height=600 width=800></iframe>
</BODY>
</HTML>
Теперь вы можете просто использовать CGI для вывода результатов из скрипта bash (/var/www/cgi-bin/search.cgi):
#!/bin/bash
echo -e 'Content-type: text/html\n\n'
echo '<html><body><table>'
eval $(echo $QUERY_STRING | sed 's/\&/\n/g')
while read -r l
do
l=${l:8}
echo "<tr><td><a href='[YOUR_HTTP_BASE]$l'>$l</td></tr>"
done <<< $(locate -l "$limit" -i "$search")
echo "</table></html>"
Результаты публикуются в виде ссылок, поэтому фильтруйте и сопоставьте ваши результаты с путями, разрешенными apache, которые вы хотите. Если у вас есть символы Unicode или html-iffy, лучше всего избегать их.Также обратите внимание, что вы потенциально можете внести гадость в свой поиск здесь, поэтому используйте на свой страх и риск или стерилизуйте ввод.
Я использую Zenity. Настроил поиск текста в папке через Thunar
Если кому поможет буду только рад
#!/bin/bash
# Author: Karavaev Viktor E. (Russia)
# Description: GUI using zenity for locate search file Thunar
# Using Thunar: ~/.config/Thunar/find_file_thunar.sh %f
# Using: ~/.config/Thunar/find_file_thunar.sh /home/user/dir/
# Date: June 05, 2020
# print debug strings
debug=0
# Find is dir
FINDSTR=$1
if [ $debug = 1 ]
then
echo $FINDSTR
fi
# open window without exit
zenity_list()
{
TOPEN=$( zenity --height=400 --width=450 \
--list --column "Files" \
--title "Result" --text "Select the file you want to open" \
--ok-label="Open" --cancel-label="Close" --separator=";" $list )
if [ $(echo $?) = 0 ]
then
if [ "$debug" = 1 ]
then
echo "TOPEN: $TOPEN \n"
fi
# Open select file this program ( i like geany ;) )
geany "$TOPEN"
zenity_list
fi
}
# Find is dir exist
if [ -n "$FINDSTR" ]
then
# This flag will make popup appear if nothing was found
FOUND=0
cd $FINDSTR
# Ask user for input, and store it in USRFILE variable
USRFILE=`zenity --entry --title="Search" --entry-text="" --text="search text"`
if [ "$debug" = 1 ]
then
# dir search command
grep -rnwil "$USRFILE"
fi
# if use clicked OK, proceed to this big if statement
if [ $(echo $?) = 0 ]
then
list=$( grep -rnwil "$USRFILE" )
if [ "$debug" = 1 ]
then
echo "list finds: $list \n"
fi
zenity_list
# Set flag to true, do not display "Nothing found"
if [ $(echo $?) = 0 ]
then FOUND=1
fi
fi
# If we didn't find anything, display a message
if [ "${#list[@]}" = 0 ]
then
if [ "$debug" = 1 ]
then
echo "Not found \n"
fi
zenity --height=100 --width=200 --info --text="Not found "
fi
if [ "$debug" = 1 ]
then
echo "flag FOUND result: $FOUND \n"
fi
else
if [ "$debug" = 1 ]
then
echo "Parameters were not found. \n"
fi
zenity --height=100 --width=200 --info--text="Parameters were not found."
fi