web-dev-qa-db-fra.com

Trouver tous les fichiers en fonction d'une liste de noms de fichiers / modèles

Dites que j'ai une liste de mots-clés:

$ cat filenames.txt 
satin
perdido
savoy
stockings
april
lullabye

Je veux trouver tous les fichiers dans un répertoire qui contient ces mots-clés.

J'ai essayé quelque chose comme:

find some_dir/ -type f "$(printf '-or -iname *%s* ' $(cat filenames.txt))"

Mais d’une manière ou d’une autre, je ne suis pas en mesure d’utiliser printf pour créer l’ensemble de la commande find; Je reçois:

-bash: printf: -o: invalid option
1
fricadelle

La commande find ne recherche pas le contenu des fichiers.

L'option -iname sélectionne les noms de fichiers.

L'erreur signifie que printf ne reconstitue pas l'option -o. Dans une telle situation, vous devriez utiliser printf -- '-o...

Je pense que le filtre final que vous recherchez est:

find some_dir/ -type f \( -iname \*satin\* -o -iname \*perdido\* ... \)

Notez la \( ... \) pour inclure tous les -iname ...

-o ... est dit POSIX dans le man find

Vous devez vous assurer que le fichier filenames.txt contient au moins une valeur.

Si vous avez besoin de trouver les noms de fichiers dans le some_dir/, essayez ceci:

set -f ; find some_dir/ -type f \( $(printf -- ' -o -iname *%s*' $(cat filenames.txt)| cut -b4-) \) ; set +f
1
Jay jargot