Je voudrais savoir s'il est possible d'envoyer des fichiers correspondants depuis Recoll (recherche des mots ou des chaînes dans le contenu de plusieurs fichiers .pdf .doc, etc.) dans un dossier.
Merci!
Vous pouvez utiliser la recherche en ligne de commande :
recoll -t "yourquery"
puis filtrez-le pour obtenir une liste de noms de fichiers. Par exemple (vous pouvez sûrement le faire plus proprement et en toute sécurité):
[:~/tmp/lalla/out] % files=$(recoll -t "x11vnc" | awk '{print $2}' | grep file:/// | sed 's+\[file://++' | sed 's/]$//')
[:~/tmp/lalla/out] % echo $files
/home/romano/personal/archivio/Tricks/remote-ubuntu-login.txt
/home/romano/lib/Jed_Backups/remote-ubuntu-login.txt
/home/romano/software/documentation/Ubuntu:Maverick.html
/home/romano/personal/library/Unknown/Ubuntu_Maverick
/home/romano/.wajig/romano-asus/Available.prv
/home/romano/.wajig/romano-asus/Available
/home/romano/.wajig/asus-romano/Available.prv
/home/romano/.wajig/asus-romano/Available
puis en les utilisant:
cp $files my-new-dir/
Pour comprendre le tuyau complexe, recoll -t
affiche quelque chose comme:
8 results
text/plain [file:///home/romano/personal/archivio/Tricks/remote-ubuntu-login.txt] [remote-ubuntu-login.txt] 322 bytes
awk
imprime uniquement les seconds éléments (séparés par des espaces) (et gâcheront les choses s'il y a des espaces dans les noms de fichiers, Je suppose);grep
sélectionne uniquement les lignes contenant "file: ///"sed
supprime le premier [file://
(notez l'utilisation de +
comme séparateur)sed
supprime le dernier ]
La bonne façon serait probablement d'écrire un petit programme python en utilisant les liaisons recoll python .
solution de script Bash
@Rmano m'a battu, mais je suppose qu'il est toujours bon d'avoir des solutions différentes. Voici le script que j'ai composé:
#!/bin/bash
# NAME: recoll_move_results
# VERSION: 0.1
# AUTHOR: (c) 2014 Glutanimate
# DESCRIPTION: queries recoll database for provided string and either symlinks or moves
# results
# DEPENDENCIES: recoll
#
# LICENSE: GNU GPLv3 (http://www.gnu.de/documents/gpl-3.0.en.html)
#
# NOTICE: THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
# EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
# PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
# IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
# PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
# YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
#
# IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
# COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS
# PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
# INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
# THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
# INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE
# PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
# PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
#
# USAGE: recoll_move_results <query>
# VARIABLES / SETINGS
DESTINATION="$HOME/recollresults" # ⇐ Set the destination folder here
QUERY="$@"
USAGE="$0 <query>"
if [[ -z "$QUERY" ]]
then
echo "Error: No arguments provided."
echo "Usage: $USAGE"
exit 1
fi
# create destination folder
mkdir -p "$DESTINATION"
# FUNCTIONS
# query recoll and convert URIs to file paths
recoll_get_results(){
recoll -t -b "$QUERY" 2> /dev/null | sed 's,file://,,g'
}
# symlink or move files read from stdin
move_files(){
while read -r FILE; do
echo "Processing $FILE"
FILENAME="${FILE##*/}"
# PLEASE USE ONLY ONE OF THE OPTIONS BELOW. COMMENT THE ONE YOU DON'T WANT
# AND UNCOMMENT THE ONE YOU DO WANT
ln -sv "$FILE" "$DESTINATION/$FILENAME" # Create a symbolic link in $DESTINATION
#mv -v "$FILE" "$DESTINATION/$FILENAME" # Move to $DESTINATION
done
}
# MAIN
recoll_get_results "$QUERY" | move_files
tilisation
Utilisez le script avec:
recoll_move_results <query>
Il exécute la requête fournie et crée un lien symbolique ou déplace tous les résultats de la recherche vers un dossier nouvellement créé. Les espaces et les caractères spéciaux (à l'exception des sauts de ligne) doivent être gérés correctement par le script.
Paramètres
Voici quelques paramètres que vous pouvez personnaliser:
DESTINATION="$HOME/recollresults"
- modifiez ceci pour définir le dossier de destinationln -sv "$FILE" "$DESTINATION/$FILENAME"
- commentez cette ligne (avec #
) et décommentez le suivant si vous êtes sûr de vouloir déplacer les fichiers au lieu de leur créer des liens symboliquesVeuillez noter que le déplacement des résultats rendra impossible l'accès aux fichiers à partir de l'interface de recherche de Recoll jusqu'à ce que vous mettiez à jour l'index à nouveau.
Une autre option serait de copier les fichiers en remplaçant:
`ln -sv "$FILE" "$DESTINATION/$FILENAME"`
avec
`cp -v "$FILE" "$DESTINATION/$FILENAME"`