是否存在用于定位的现有 Web GUI?

是否存在用于定位的现有 Web GUI?

我正在寻找一种轻量级的解决方案来帮助用户在我的服务器上查找文件。

在命令行中运行,我只需使用locate,如果需要,可以使用grep命令。但是,用户无法访问提示符,也不知道如何使用更复杂的管道命令。
我一直在尝试使用一些搜索引擎,如solr和opensearch,但是这些搜索引擎对具有大量数据的全高清资源要求很高,而大多数时候,简单的名称搜索就足够了。

有人知道可以利用现有 locatedb 的 Web GUI 吗?
或者另一种方法,例如轻量级搜索引擎,只需很少的设置工作量和有限的资源需求,使用中央搜索数据库并为不同的平台提供 GUI?

答案1

更新,2018年1月22日

我偶然发现mlocate-web在 GitHub 上,它非常符合 OP 的要求,尽管缺乏打开文件的能力。可以手动运行或作为守护进程运行。根据 README.md,该软件包是在 Ubuntu 16.04 上开发的,所以到目前为止它还是相当新的。

2 月 2 日小更新

在 中添加双引号gnome-open "$TOPEN",以便 gnome-open 获取包含空格的文件的完整路径名。

更新 # 2,1 月 30 日

根据评论中的要求,我改进了脚本,并添加了打开文件的选项。一切都通过 zenity、locate 和 gnome-open 实现。赞扬 Unix 将命令传递到其他命令的哲学!

我已经注释了脚本,因此应该清楚在哪里、什么以及如何。在屏幕截图中,我打开了 Java 的 Hello World 程序。如果用户单击“取消/退出”按钮,脚本就会随时退出。

附注:原作者要求该应用应跨平台。据我所知,zenity、gnome-open 和locate 不依赖于 GNOME shell 的存在。此外,用户将连接到他的 Ubuntu 服务器,并且无论 GNOME shell 是否存在,所有这些应用都可以在 Ubuntu 上运行。换句话说,他们将在他的系统上执行脚本,而不是在他们的系统上,以定位文件。

完善后的脚本:

#!/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,1 月 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,我已经用pshtop实用程序检查过了,它不会占用太多资源。你可以用 来安装它sudo apt-get install gnome-search-tool

在此处输入图片描述

答案2

我对此进行了研究,发现了一个多功能文件搜索工具,名为鲶鱼。听起来很有希望,完全用 Python 编写,有助于查找和定位文件。我还发现了一个图形用户界面

答案3

我知道这个问题已经很老了,但我发现自己也在问同样的问题,关于 Raspberry Pi 上的一些冷存储。我想出了一个使用 CGI 的超级简单解决方案,但要小心——安全性不是它的强项。只将其用于个人系统或私人网络,因为它很容易受到注入攻击。好消息是,如果您已经安装了 Apache/NGinx,它可以快速轻松地部署。

搜索.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 字符,最好将其转义。另请注意,您可能会在此处将恶意内容注入您的搜索中,因此请自行承担风险或对输入进行消毒。

示例截图

答案4

我使用 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

在此处输入图片描述

相关内容