web-dev-qa-db-fra.com

Comment rechercher plusieurs mots (dans n'importe quel ordre) dans le nom de fichier - GUI (ou terminal)

Je recherche un outil de recherche (depuis le bureau Ubuntu 14.04) ou une méthode/commande (Terminal) qui me permettra de rechercher dans les noms de fichiers des mots complets ou partiels, dans n'importe quel ordre, quelle que soit la capitalisation.

En connaissez-vous un?

Voici un exemple de ce que je dois faire. Je sais que quelque part sous /home/myusername J'ai un fichier dont le nom contient les mots "personnel", "revenu", "impôt", "état". Mais je ne me souviens pas si le nom de fichier est

  • state personal income tax return.doc ou
  • personal Income Tax return - state.doc ou
  • income tax return - State - personal.doc.

et je ne me souviens pas non plus si certains mots sont en majuscules. En outre, j'ai un million d'autres fichiers avec chacun des mots. Donc, une simple recherche sur l'un des mots (comme seulement "état" ou seulement "taxe") ne m'aide pas beaucoup, car elle ramène trop de fichiers.

Idéalement, j'aimerais pouvoir simplement taper [déclaration de revenu] ou [déclaration de revenu] et lui faire ramener les fichiers avec les trois mots dans le nom de fichier, indépendamment de la capitalisation ou de l'ordre des mots. Un outil GUI serait préférable, mais une méthode Terminal serait également OK.

J'ai essayé Catfish et gnome-search-tool/"Search for Files" - aucun d'eux ne semble fonctionner pour plusieurs termes de recherche à moins que les termes ne soient saisis dans l'ordre de leur apparition dans le nom du fichier, sans aucun autre mot dans entre les termes de recherche.

1
gj7755

N'utilisez pas grep! find a une syntaxe de correspondance de nom de fichier parfaitement fine. Pour utiliser votre exemple:

find [PATH...] -iname '*personal*' -iname '*income*' -iname '*tax*'

[PATH...] sont zéro ou plusieurs chemins de recherche.

Si vous n'avez pas désactivé votre base de données de noms de fichiers mlocate, il peut être plus rapide de l'utiliser pour une recherche plus rapide. Malheureusement, il ne prend pas en charge plusieurs termes de recherche conjonctifs, vous avez donc également besoin de grep:

locate -ib income | grep -i personal | grep -i tax

Comme vous allez quand même regarder le résultat de la recherche, il peut être préférable de rechercher un sur-ensemble (au cas où votre mémoire ne vous servirait pas bien):

locate -ib income
3
David Foerster

Vous pouvez utiliser grep autant de fois pour autant de mots que vous souhaitez rechercher dans les noms de fichiers. Par exemple, pour connaître les noms de fichiers contenant les mots "revenu", "impôt", "personnel" et "état", vous pouvez procéder comme suit:

ls -R /home/myusername/ | grep -i "income"  | grep -i "tax" | grep -i "personal" | grep -i "state"

Ici le -i switch garantira une insensibilité à la casse.

REMARQUE:

find serait mieux adapté à ce type de scénario. Vérifiez cette réponse et cette réponse pour plus de détails.

1
heemayl

Ce que je fais généralement est dans mon répertoire personnel find . | grep 'SEARCHTERM1\|SEARCHTERM2'

0
Ruediger