Pour lister de manière récursive tous les fichiers de votre répertoire personnel qui ont l'extension de fichier PDF et qui contiennent une ligne qui correspond à l'expression rationnelle ''. [iI]n Haskell
par exemple, vous pouvez émettre :
find ~/ -regextype posix-extended -regex '.*\.pdf' -execdir sh -c 'pdftotext "$0" - | grep -El --label="$PWD${0#?}" "$1"' {} '[iI]n Haskell' \;
Remarques :
- Bien que cela ne soit pas particulièrement nécessaire pour cet exemple, j'ai construit ce système en évitant l'utilisation de
-exec
o xargs
parce que, pour des raisons de sécurité Je pense que c'est une bonne pratique de prendre l'habitude de le faire. Changement ' -execdir
à -exec
et $PWD${0#?}
à $0
devrait donner le même résultat dans ce cas.
- Au lieu d'utiliser gants pour le filtrage des noms de fichiers, il peut s'avérer utile d'utiliser la plus grande puissance expressive de la fonction expressions régulières et de faire du filtrage sur l'ensemble du chemin. J'ai inclus la pratique ici pour montrer comment cela peut être fait. Notez que le chemin qui est soumis au filtrage est le chemin qui devrait normalement être imprimé. Le fait qu'il soit relatif ou absolu dépend du ou des arguments de chemin donnés, qui, s'ils sont émis, correspondent par défaut au répertoire de travail actuel ('
./
'). Dans cet exemple, les chemins recherchés sont tous absolus (c'est-à-dire qu'ils commencent par ' '). /
') car ' ~/
' est étendu au chemin absolu du répertoire personnel de l'utilisateur actuel, et c'est le seul argument de chemin.
- Le
$0
et $1
' sont des paramètres positionnels utilisés de manière à citer correctement les arguments. Si cela n'est pas fait correctement, la commande est vulnérable aux noms de fichiers arbitraires.
- '
${0#?}
' supprime le premier caractère de $0
c'est-à-dire le .
'.
Pour imprimer chaque ligne correspondante précédée du nom de fichier :
find ~/ -regextype posix-extended -regex '.*\.pdf' -execdir bash -c 'pdftotext "$0" - | grep -EH --label="${0:2}" "$1"' {} '[iI]n Haskell' \;
Cette variante utilise ' -H
au lieu de -l
', et les étiquettes avec le nom du fichier plutôt que le chemin du fichier. ' ${0:2}
' dépouille les deux premiers caractères de $0
c'est-à-dire le ./
mais elle n'est apparemment pas reconnue par sh
.
Bien sûr, adaptez-le à vos besoins.
0 votes
wingrep.com ! :)
0 votes
Je veux d'abord connaître les outils en ligne de commande et s'il y a des outils GUI, alors ce sera bien aussi Wingrep est seulement sous Windows. Et je veux rechercher uniquement des fichiers pdf, donc une application optimisée pour cela serait agréable à avoir.
1 votes
Question similaire chez Unix Stack Exchange