I want to do a recursively grep. So typically I will do the following:
grep pattern -r /some/path
Normally this will work. However, when there a FIFO file resides in the path, grep will stuck there.
johnson@ISD32_54_sles10:~/tmp$ ls -l 1
prw-r--r-- 1 neoli users 0 2012-05-16 17:24 1
Then I call the strace command to identify the problem, I got this.
...
stat64("./1", {st_mode=S_IFIFO|0644, st_size=0, ...}) = 0
open("./1", O_RDONLY|O_LARGEFILE) = 3
read(3, <unfinished ...>
So my problem is how to do a recursively grep when there is a FIFO in the path? Does grep has a command line option which will tell grep to ignore FIFO when specified?
Thanks for your kind help.
From man grep
(GNU)
-D ACTION, --devices=ACTION
If an input file is a device, FIFO or socket, use ACTION to process it.
By default, ACTION is read, which means that devices are read just as if
they were ordinary files. If ACTION is skip, devices are silently skipped.
One way would be to use find
find . -type f -exec grep pattern {} \;
this will only grep for the pattern on regular files (so no symbolic links, pipes, etc.)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With