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
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