Hi friends! 🤓 I am on a gnulinux and trying to list all files in the active directory and it’s subdirectories. I then want to pipe the output to “cat”. I want to pipe the output from cat into grep.
Please help! 😅
- Use - findinstead.- Seconded, but I always have to look up the syntax. --type=file --name=“string”? 
- Thank you! 🤩 
 
- Bro you can just run - find- thanks dude 
 
- Note, you almost never have to use cat. Just leaving it out would have been enough to find your file (although find is still better). - When you want to find a string in a file it’s also enough to use - grep string fileinstead of- cat file | grep string. You can even search through multiple files with- grep string file1 file2 file*and grep will tell you in which file the string was found.- Obligatory link to the Useless Use of Cat Awards - for a moment, I thought OP was looking for cat photos or something. 
 
- So I could use something like grep string -R * to find any occurrence of the string in any files in the folder and sub-folders. - thank you! - grep -r string .- The flag should go before the pattern. - -rto search recursively,- .refers to the current directory.- Why use - .instead of- *? Because on it’s own,- *will (typically) not match hidden files. See the last paragraph of the ‘Origin’ section of: https://en.m.wikipedia.org/wiki/Glob_(programming). Technically your- lscommand (lacking the- -a) flag would also skip hidden files, but since your comment mentions finding the string in ‘any files,’ I figured hidden files should also be covered (the- findcommands listed would also find the hidden files).- EDIT: Should have mentioned that - -Ris also recursive, but will follow symlinks, where- -rwill ignore them.- TIL 
 
 
 
- To answer your og question since it is a valuable tool to know about, xargs. - ls | xargs cat | grep print - Should do what you want. Unless your file names have spaces, then you should probably not use this. - find -print0 | xargs -0 can handle spaces - Edit and you probably want xargs --exec instead of piping after 
- thank you 
 
- I think you can just do - grep print **/*.- ty 
 
- It’s valuable to learn how to do an inline loop - ls | while read A; do cat $A | grep print; done - This will read each line of ls into variable A, then it’ll get and grep each one. - thank you 
 
- ripgrepdoes exactly what you want
- deleted by creator - ty 
 
- grep -r print .- I.e. Grep on - printrecursively from- .(current directory)- Or for more advance search - find . -name "*.sh" -exec grep -H print {} \;- I.e find all files with sh extension and run grep on it ( - {}become the filename).- -Hto include filename in output.- this is great ty! 
 
- I just pipe to - moreand filter with /







