Why doesn't grep using pipe work here?
Solution 1
That's nothing to do with grep
- it's because the pipe |
redirects the standard output stream stdout
whereas the Permission denied
messages are in the standard error stream stderr
. You could achieve the result you want by combining the streams using 2>&1
(redirect the stream whose file descriptor is 2
to the stream whose file descriptor is 1
) so that stderr
as well as stdout
gets piped to the input of the grep command
find / -name libGL.so.1 2>&1 | grep -v 'denied'
but it would be more usual to simply discard stderr
altogether by redirecting it to /dev/null
find / -name libGL.so.1 2>/dev/null
Using |& instead of 2>&1 |
If you take a look at the Bash man page you'll likely notice this blurb:
If
|&
is used, the standard error of command is connected to command2's standard input through the pipe; it is shorthand for2>&1 |
.
So you can also use this construct as well if you want to join STDERR and STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
Solution 2
Your command should be:
find / -name libGL.so.1 2>/dev/null
Find is complaining about permissions on standard error (fd2). In order to eliminate those lines, redirect (>) standard out to the bit bucket (/dev/null).
Solution 3
The "permission denied" lines are going to the stderr (standard error) stream, but you are piping stdout (standard out) through grep.
You can redirect away stderr entirely with
find / -name libGL.so.1 2> /dev/null
Solution 4
Have you tried calling the command with sudo?
sudo find / -name libGL.so.1
If it still shows the message, use the already mentioned redirect of stderr (fd=2) to nirvana (/dev/null):
sudo find / -name libGL.so.1 2> /dev/null
More ideas here, good luck!
Related videos on Youtube
![modulitos](https://i.stack.imgur.com/TZDGc.jpg?s=256&g=1)
modulitos
Updated on September 18, 2022Comments
-
modulitos almost 2 years
I have the following command:
find / -name libGL.so.1
Which returns lots of lines with "Permission denied". I want to exclude such lines, so I added the following:
find / -name libGL.so.1 | grep -v 'denied'
But the output is the same - my
grep -v 'denied'
is not filtering out the lines withPermission denied
. I've tried many variations, looked over grep tutorials, but I cannot figure out the problem. Any suggestions? -
Izkata about 10 yearsAdditional note on combining them: If for some bizarre reason the file exists at
/foo/bar/denied/libGL.so.1
, combiningstdout
andstderr
then filtering would hide the result