web-dev-qa-db-fra.com

Recherche de fichiers / dossiers contenant 3 éléments de texte

J'utilise Ubuntu 14.04 et j'essaie actuellement de rechercher des fichiers et des dossiers contenant "hello", "165" et "920" (dans leurs noms - pas dans les fichiers) à l'aide de la commande ci-dessous:

    find . -name "hello 165 920" > /search/results/here/search20170224.txt

Lorsque je recherche une chaîne comme celle-ci dans Nemo ("bonjour 165 920"), les résultats indiqués correspondent à l'objectif recherché. Si les fichiers ou les dossiers contiennent les mots "hello 165 920" (dans un ordre donné ou entre autres textes), un résultat s'affiche.

Exemples: helloxx165xx920, hello_165-920, hello165920

Ce que je veux faire est donc tout à fait possible, mais via la commande find de la CLI, je n’obtiens que des résultats pour des correspondances parfaites.

Je ne sais pas comment faire ce type de recherche à l'aide de la commande find et je dois exécuter environ 500 de ces recherches les unes après les autres; une approche CLI est donc nécessaire pour ne pas avoir à configurer chaque recherche manuellement et à planter Nemo toutes les 5 minutes en raison de la taille et de la profondeur des recherches.

Toute aide que n'importe qui peut donner serait grandement appréciée =]

5
Pete Duggan

Vous devez utiliser des caractères génériques (*foo* au lieu de foo), plusieurs tests -name et les combiner avec -and:

find . -name "*hello*" -and -name '*165*' -and -name "*920*" > search20170224.txt

Si vous avez plusieurs chaînes à rechercher, vous pouvez les enregistrer dans un fichier où chaque chaîne est une colonne (séparée par un espace):

hello 165 920
goodbye 321 123

Vous pouvez ensuite parcourir le fichier et construire la requête find:

while read a b c; do
    find . -name "*$a*" -and -name "*$b*" -and -name "*$c*" > search."$a"_"$b"_"$c".txt
done
11
terdon