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! 😅
Submitted 9 months ago by sighofannoyance@lemmy.world to nostupidquestions@lemmy.world
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! 😅
Bro you can just run find
thanks dude
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
thank you
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 file
instead 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.
-r
to 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: en.m.wikipedia.org/wiki/Glob_(programming). Technically your ls
command (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 find
commands listed would also find the hidden files).
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
ripgrep
does exactly what you want
grep -r print .
I.e. Grep on print
recursively from .
(current directory)
this is great ty!
I just pipe to more
and filter with /
geekworking@lemmy.world 9 months ago
Use
find
instead.caseyweederman@lemmy.ca 9 months ago
Seconded, but I always have to look up the syntax. --type=file --name=“string”?
sighofannoyance@lemmy.world 9 months ago
Thank you! 🤩