{"id":481610,"date":"2022-08-06T01:00:44","date_gmt":"2022-08-05T22:00:44","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-use-grep-recursively-within-certain-file-extensions\/"},"modified":"2022-08-06T01:00:44","modified_gmt":"2022-08-05T22:00:44","slug":"how-to-use-grep-recursively-within-certain-file-extensions","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-use-grep-recursively-within-certain-file-extensions\/","title":{"rendered":"#How to Use grep Recursively Within Certain File Extensions"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a2ed9104c71d\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a2ed9104c71d\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-use-grep-recursively-within-certain-file-extensions\/#%E2%80%9CHow_to_Use_grep_Recursively_Within_Certain_File_Extensions%E2%80%9D\" >&#8220;How to Use grep Recursively Within Certain File Extensions&#8221;<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-use-grep-recursively-within-certain-file-extensions\/#Only_Including_Certain_Files_in_grep_Searches\" >Only Including Certain Files in grep Searches<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-use-grep-recursively-within-certain-file-extensions\/#Using_find_Instead\" >Using find Instead<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"%E2%80%9CHow_to_Use_grep_Recursively_Within_Certain_File_Extensions%E2%80%9D\"><\/span>&#8220;How to Use grep Recursively Within Certain File Extensions&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<div>\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage alignnone size-full wp-image-4038\" data-pagespeed-no-defer=\"\" src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/csit\/2017\/07\/add8ac45.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"Bash Shell\" width=\"1400\" height=\"600\"\/><\/p>\n<p><code>grep<\/code>\u00a0is a great tool for searching through files and standard input in Linux and is able to match string and Regex patterns. However, sometimes it\u2019s necessary to control what kinds of files <code>grep<\/code>\u00a0searches for, and it has flags built in to do just that.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Only_Including_Certain_Files_in_grep_Searches\"><\/span>Only Including Certain Files in grep Searches<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>By default, <code>grep<\/code>\u00a0will search all files in a given folder and its subfolders if you invoke it with the recursive <code>-r<\/code>\u00a0flag. This will pick up everything, but if you only want certain extensions, the option you\u2019ll want to use is <code>--include.<\/code><\/p>\n<p>The <code>--include<\/code> flag tells <code>grep<\/code> to\u00a0<em>only include<\/em> files matching a certain pattern. If it\u2019s specified, <code>grep<\/code>\u00a0will treat all include flags as a whitelist. You can use this with any <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/man7.org\/linux\/man-pages\/man7\/glob.7.html\">Linux glob characters<\/a>, such as wildcards to match everything including a certain extension:<\/p>\n<pre>grep -inr --include \\*.txt \"foo\" ~\/folder<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-802413\" data-pagespeed-lazy-src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2022\/04\/Screenshot_201.jpg?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"447\" height=\"189\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Note that this is escaped with a forward slash <code>\\<\/code>\u00a0because it\u2019s possible for filenames to have asterisks in them. You can also specify multiple <code>--include<\/code>\u00a0flags, for example, searching all HTML, JS, and CSS source files in a wwwroot:<\/p>\n<pre>grep -inr --include \\*.html --include \\*.css --include \\*.js \"foo\" ~\/folder<\/pre>\n<p>You can similarly also exclude certain file names, which will still match everything except for the glob, acting as a blacklist on top of the existing configuration:<\/p>\n<pre>grep -inr --exclude \\*.txt \"foo\" ~\/folder<\/pre>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-802414\" data-pagespeed-lazy-src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2022\/04\/Screenshot_202.jpg?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"480\" height=\"265\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>There\u2019s also a flag to exclude entire directories at once:<\/p>\n<pre>grep -inr --exclude-dir config \"foo\" ~\/folder<\/pre>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Using_find_Instead\"><\/span>Using find Instead<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Alternatively, if you prefer using the <code>find<\/code>\u00a0utility to search through files, you can connect it to <code>grep<\/code>\u00a0using pipes and <code>xargs<\/code>.\u00a0<code>find<\/code>\u00a0can do searching with patterns and Regex, and has a number of advantages, including being able to filter files easily based on metadata like size, date created and modified, and other Linux identifiers.<\/p>\n<p>The command is a little obtuse, as you\u2019ll need to use <code>-print0<\/code>\u00a0at the end of <code>find<\/code>\u00a0to print out a single line list, and then pass it to <code>xargs -0<\/code>\u00a0and <code>grep<\/code>\u00a0from there.<\/p>\n<pre>\u00a0find .\/ -type f -iname \"*.txt\" -print0 | xargs -0 grep \"foo\"<\/pre>\n<\/div>\n<p><script>\n setTimeout(function(){\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s) } (window, document,'script',\n  'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\n   fbq('init', '335401813750447');\n   fbq('track', 'PageView');\n  },3000);\n<\/script><\/p>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.howtogeek.com\/devops\/how-to-use-grep-recursively-within-certain-file-extensions\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;How to Use grep Recursively Within Certain File Extensions&#8221; grep\u00a0is a great tool for searching through files and standard input in Linux and is able to match string and Regex patterns. However, sometimes it\u2019s necessary to control what kinds of files grep\u00a0searches for, and it has flags built in to do just that. Only Including&#8230;<\/p>\n","protected":false},"author":1,"featured_media":481611,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.howtogeek.com\/wp-content\/uploads\/csit\/2017\/07\/add8ac45.png?height=200p&trim=2,2,2,2","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-481610","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/481610","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=481610"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/481610\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/481611"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=481610"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=481610"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=481610"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}