7 votes

Recherche floue dans le système de fichiers à la manière de Sublime Text pour Mac OS X

Actuellement, j'utilise les capacités de navigation dans le système de fichiers d'Alfred. C'est assez génial, mais parfois je veux que fuzzy-search corresponde non seulement au nom du fichier, mais aussi au chemin d'accès complet.

Par exemple, je veux trouver un fichier pdf avec un nom de fichier très commun (disons proposition.pdf). Et j'ai une structure de répertoire comme celle-ci :

 - dropbox
   - partners
     - supercorp
       - proposal.pdf
     - megacorp
       - proposal.pdf

Ce serait bien si je pouvais taper dro/meg/propos pour accéder au dossier de proposition de la mégacorporation. La réponse peut être le plugin Alfred ou une configuration quelconque, mais j'accepterai toute solution me permettant de naviguer rapidement vers ce fichier et d'effectuer une action (par exemple, le révéler dans Finder ou autre). " Recherche par type La fonctionnalité " est très importante.

UPD Je viens de trouver un question similaire . Il semble que la fonction de recherche de chemin complet soit absente car mdfind ne recherche que le nom du fichier et tous les outils l'utilisent en interne.

3voto

user6844017 Points 121

Alfred est livré avec un exemple de flux de travail appelé Recherche dynamique de fichiers qui fait quelque chose de similaire à la recherche floue :

https://www.alfredapp.com/blog/tips-and-tricks/how-to-get-the-results-you-want-in-alfred-every-time/

https://www.alfredforum.com/topic/11981-searching-in-files-in-a-specific-location/?do=findComment&comment=62957

Alfred recherche simultanément dans les répertoires et les noms de fichiers

Pour l'ajouter, cliquez sur le [+] en bas des préférences Workflows et choisissez Exemples > Recherche dynamique de fichiers.

  1. Tapez "ff" dans Alfred pour sélectionner un champ de recherche.
  2. Tapez ensuite le nom du fichier que vous recherchez dans ce dossier.

Pour plus d'informations sur la fonction de filtrage des fichiers d'Alfred, cliquez ici. https://www.alfredapp.com/help/workflows/inputs/file-filter/

2voto

Il existe un attribut kMDItemPath, mais il ne peut pas être utilisé dans les requêtes. Vous pouvez cependant extraire la sortie de mdfind :

$ pp() { path="/${1%/*}/"; mdfind "name:${1##*/}" | grep -i "${path//\//.*\/}"; }
$ time pp desk/ante
/Library/Desktop Pictures/Antelope Canyon.jpg
0.365

La correspondance avec kMDItemFSName est souvent beaucoup plus lente :

$ time mdfind "kMDItemFSName=\"ante.*\"c" | grep -i '/desk.*/'
/Library/Desktop Pictures/Antelope Canyon.jpg
10.232

J'ai essayé de créer un filtre script comme ceci dans Alfred :

q="{query}"

shopt -s nocasematch

amp() {
  local o=${1//&/&}
  o=${o//</&lt;}
  printf %s "${o//>/&gt;}"
}

output='<?xml version="1.0"?>
<items>
'

while IFS= read -r l; do
  path=$(amp "$l")
  output+="<item>
<arg>$path</arg>
<title>$(amp "${l##*/}")</title>
<subtitle>$path</subtitle>
<icon type=\"fileicon\">$path</icon>
</item>
"
done < <(if [[ $q =~ .+/.+ ]]; then
  dir=${q%/*}
  mdfind "name:${q##*/}" | while IFS= read -r l; do
    [[ ${l%/*} = */${dir//\/*/}* ]] && echo "$l"
  done
else
  mdfind "kind:folder name:$q"
fi | head -n20)

echo "$output</items>
</xml>"

Je n'ai cependant pas réussi à le faire fonctionner de manière fiable, et il fallait souvent plusieurs secondes pour mettre à jour les résultats.

2voto

Byron Points 46

Vous pouvez essayer Point de repère . Findspot prend en charge les fonctionnalités suivantes

  1. Recherche floue comme Control-P de Sublime Text
  2. Recherche par chemin complet
  3. Recherche au fur et à mesure de la saisie

Voici une capture d'écran de Findspot en utilisant votre exemple :

enter image description here

En fait, vous pouvez sauter les barres obliques et vous obtiendrez le même résultat.

0voto

Zo219 Points 2597

Easy Find, gratuit, de DevonTechnologies vous permet de rechercher des fichiers, des dossiers ou les deux, dans un seul dossier ou sur l'ensemble du disque, et d'utiliser des critères facilement sélectionnables : flou, invisible, nom, contenu, etc.

Difficile d'estimer les centaines d'heures qu'il m'a permis d'économiser au fil des ans pendant qu'Apple bidouillait avec Spotlight et Saved Search. Trouve, presque instantanément, n'importe quoi .

0voto

Rivenfall Points 101

Ajoutez ceci dans ~/.bash_profile (vous pouvez remplacer cd avec open )

export PATH=$PATH:~/bin

cds(){
  cd "$(find . -type d -maxdepth 3 | selecta)"
}

Et ajoutez la sélection à partir de https://github.com/garybernhardt/selecta/blob/master/selecta dans ~/bin

Maintenant, lorsque vous lancez un terminal, vous pouvez taper cds et commencer à chercher !

Fichier AppleScript pour ouvrir iTerm et saisir automatiquement les cds : cds.applescript

activate application "iTerm"
tell application "System Events" to keystroke "t" using command down
tell application "iTerm" to tell session -1 of current terminal to write text "cds"

vous pouvez tester le script en utilisant la commande osascript cds.applescript Vous pouvez même créer un raccourci clavier pour l'appeler : http://www.macdevcenter.com/pub/a/mac/2007/06/08/hit-and-run-launching-applescripts-with-keyboard-shortcuts.html?page=1

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X