5 votes

Existe-t-il une interface web pour locate ?

Je cherche une solution légère pour aider les utilisateurs à trouver des fichiers sur mon serveur.

En ligne de commande, je peux simplement utiliser locate, si nécessaire avec une commande grep. Cependant, les utilisateurs n'ont pas accès à l'invite et n'ont pas les connaissances nécessaires pour utiliser des commandes pipées plus compliquées.
J'ai expérimenté certains moteurs de recherche comme solr et opensearch, mais ils sont assez gourmands en ressources pour des disques durs complets avec beaucoup de données, alors que la plupart du temps une simple recherche de nom suffit.

Quelqu'un connaît-il une interface utilisateur web qui peut utiliser l'interface existante de locatedb ?
Ou une autre approche, comme un moteur de recherche léger, avec un faible effort d'installation et des demandes de ressources limitées, qui utilise une base de données de recherche centrale et fournit une interface utilisateur pour différentes plates-formes ?

6voto

Sergiy Kolodyazhnyy Points 97292

Mise à jour, 22 janvier 2018 :

Je suis tombé sur mlocate-web sur GitHub, qui répond assez bien aux besoins de l'OP, bien qu'il n'ait pas la capacité d'ouvrir des fichiers. Il peut être exécuté manuellement ou en tant que démon. D'après le README.md, le paquet a été développé sur Ubuntu 16.04, il est donc assez récent.

Mini-actualisation, 2 février

Ajout de guillemets doubles à gnome-open "$TOPEN" afin que gnome-open obtienne le chemin complet des fichiers qui ont de l'espace.

Mise à jour n° 2, 30 janvier :

Comme demandé dans les commentaires, j'ai affiné le script, et ajouté l'option d'ouvrir des fichiers. Tout est implémenté avec zenity, locate, et gnome-open. Louons la philosophie Unix qui consiste à insérer des commandes dans d'autres !

J'ai annoté le script , ce qui devrait permettre de savoir où, quoi et comment. Dans les captures d'écran, j'ouvre le programme Hello World pour Java. Le script se termine à tout moment si l'utilisateur clique sur les boutons Cancel/Quit.

Note complémentaire : Le PO a demandé que l'application soit multiplateforme. Pour autant que je sache, zenity, gnome-open et locate ne dépendent pas de la présence de GNOME Shell. En outre, les utilisateurs se connecteront à son serveur Ubuntu, et toutes ces applications fonctionnent sur Ubuntu indépendamment de la présence de GNOME Shell. En d'autres termes, ils exécuteront le Shell sur son système, et non sur le leur, pour localiser les fichiers.

Le script raffiné :

#!/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

Captures d'écran des améliorations

Obtenir l'avis de l'utilisateur enter image description here Afficher les résultats de la recherche s'il y en a. Le chargement peut prendre un certain temps. enter image description here Ouvrir le fichier sélectionné enter image description here

Pour savoir comment ouvrir ce script à l'aide d'un raccourci (double-clic), reportez-vous à ma précédente mise à jour ci-dessous

Mise à jour n° 1, 29 janvier : Ne tenez pas compte de mon message précédent. J'ai réfléchi à la façon dont vous avez formulé le problème : "une interface graphique pour localiser". En fait, il existe une interface graphique pour scripts , zenity et je l'ai utilisé pour faire une ébauche d'un script qui pourrait être utile. N'hésitez pas à le modifier et à y ajouter des fonctionnalités, mais au niveau le plus basique, il s'agit d'une localisation avec gui.

Pour ce qui est de rendre un script "double-cliquable", il faut se référer à ici

Le script

#!/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

Captures d'écran

enter image description hereenter image description hereenter image description hereenter image description hereenter image description here

Ancien poste

Il y a gnome-search-tool que j'ai vérifié avec ps y htop et ne nécessite pas trop de ressources. Vous pouvez l'installer avec sudo apt-get install gnome-search-tool .

enter image description here

0voto

Hashes Points 1

J'ai fait des recherches à ce sujet et j'ai découvert un outil de recherche de fichiers polyvalent appelé Poisson-chat . Il semble prometteur, entièrement écrit en Python et utile pour trouver et localiser des fichiers. J'ai également trouvé un GUI

0voto

BoeroBoy Points 131

Je sais que c'est assez vieux mais je viens de me retrouver à poser la même question pour un stockage froid sur un Raspberry Pi. J'ai trouvé une solution super simple avec CGI mais attention - la sécurité n'est pas son point fort. N'utilisez ceci que pour un système personnel ou un réseau privé parce que c'est mûr pour les attaques par injection. La bonne nouvelle est que c'est rapide et facile à déployer si vous avez déjà Apache/NGinx d'installé.

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>

Vous pouvez maintenant utiliser CGI pour extraire les résultats d'un script 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>"

Les résultats sont affichés sous forme de liens, alors filtrez et mappez vos résultats vers les chemins autorisés par apache que vous souhaitez. Si vous avez des caractères unicode ou html-iffy, le mieux est de les échapper. Notez également que vous pouvez potentiellement injecter des éléments nuisibles dans votre recherche ici, alors utilisez-le à vos risques et périls ou stérilisez l'entrée.

Sample screenshot

0voto

J'utilise zenity. J'ai configuré la recherche de texte dans le dossier via Thunar

Si quelqu'un peut m'aider, je n'en serai que plus heureux.

#!/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

enter image description here

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X