Mon objectif est de trouver tous les fichiers pdf sur une machine distante, j'ai donc recours à la commande utile find
. Alors je tape
trouver ~ * .pdfou
trouver ~ "* .pdf"et je ne reçois rien. Je fais de même sur ma machine et je ne reçois rien. Je fais une recherche régulière depuis le menu de ma machine et je trouve pas mal de fichiers pdf. Quelqu'un pourrait-il me dire ce que je fais mal?
find
est loin d'être inutile.find
c'était intuitif. Je pourrais probablement dire la même chose sur un ton plus gentil; parfois je réagis à des commentaires (stupides) négatifs.Réponses:
find
est loin d'être inutile. Vous ne l'utilisez pas correctement.essayer:
find . -type f -iname '*.pdf'
la source
Jetez un œil à la documentation des findutils . La
find
commande est incroyablement puissante et, par conséquent, possède une interface quelque peu compliquée. Vous pouvez faire ce que vous voulez avec:La commande ci-dessus signifie "rechercher dans. Pour les entrées de type fichier avec un nom insensible à la casse correspondant à * .pdf (et imprimer le nom de ces correspondances)". La commande find peut en fait être utilisée pour exécuter des commandes sur les fichiers trouvés (au lieu ou en plus d'imprimer les noms de fichiers). Pour vos besoins, cependant, vous pouvez vous sentir plus à l'aise avec la commande Locate , qui - en supposant que vous avez créé la base de données de localisation à l'aide de updatedb - facilite la recherche de fichiers. Par exemple:
Vous constaterez également que la commande Locate est généralement plus rapide que la commande find, car Locate utilise un index des noms de fichiers (la base de données Locate), tandis que find parcourt la hiérarchie pour chaque appel.
la source
Vous manquez simplement le prédicat qui indique ce que vous recherchez (par exemple
-name
.)Pour rechercher dans le répertoire personnel par nom:
Notez que le caractère générique
*
doit être échappé afin que le shell ne l'interprète pas avant que find ne lui mette la main dessus. L'utilisation de'*.pdf'
et"*.pdf"
aura le même effet que\*.pdf
.Pour rechercher sans tenir compte de la casse:
Pour élaguer les résultats aux fichiers uniquement (l'expression de nom s'en occupera probablement pour vous, mais juste au cas où vous auriez des répertoires aux noms étranges):
Pour vous assurer que find suit les liens symboliques (je veux généralement le faire moi-même lorsque je fais des recherches):
Pour faire quelque chose avec les fichiers que vous avez trouvés: vous pouvez les vider dans un fichier en utilisant la redirection stdout (par exemple tack on
> filename
à la fin), ou utiliser l'-exec
option pour exécuter une commande (voir la page de manuel pour plus de détails). Cependant, ce dernier exécute une commande sur chaque fichier à la fois. il est souvent plus rapide de laisser laxargs
commande passer vos fichiers trouvés comme arguments à une autre commande, en une seule fois ou en gros morceaux à la fois. Par exemple, pour les greps ad hoc (mais non indexés) via les fichiers d'en-tête:Et une dernière extension, pour que cette dernière commande fonctionne correctement si vous avez des fichiers et des répertoires avec des espaces:
la source
jetez un oeil à ce tutoriel
je pense que ce que tu veux faire c'est
la source
iname
attribut pour une meilleure vision du couloirJ'avais l'habitude de combiner la recherche avec grep comme
trouver . . | grep -i ".pdf"
n'est peut-être pas très efficace, mais il fait très bien l'affaire.
la source
find
direct si vous désiriez, via-iregex
:find ~ -iregex '.*\.pdf'
. Le problème est quefind
le motif est traité comme il a toujours un^
devant et un$
derrière, donc votre motif doit être un peu plus compliqué. Notez également que.
dans votre modèle se trouve en fait un caractère générique à caractère unique, et non une période littérale.Trouvez les fichiers dont vous avez besoin téléchargés au cours des x derniers jours
vous trouvera des fichiers pdf dans votre
~
répertoire personnel et ci-dessous avec une extension.pdf
indépendamment des majuscules et minuscules (c'est iiname
) et modifiés il y a 1 jour car j'ai ajoutémtime -1
; si vous mettez -60 dans mtime, ce sera les 60 derniers jours.la source
Pour exécuter une recherche dans les fichiers "trouvés", il y a cette construction:
La commande exec doit se terminer par le caractère d'échappement ";" et le -H est nécessaire pour que grep imprime le chemin du fichier en plus de la ligne dans le fichier où se trouve "string".
la source