Visit Our UNIX and Linux User Community


How do I redirect output from "find", either to a file or another command?


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How do I redirect output from "find", either to a file or another command?
# 1  
Old 02-09-2020
How do I redirect output from "find", either to a file or another command?

I'm trying to find out what happened to the rogue game that apt-get told me it installed, so I thought I would find the file. I went to the root and entered:
Code:
find -name "rog*.*"

I get a large number of lines saying my access is denied in various directories. I figure I'll practice my Unix commands by using grep to filter out these lines, so I enter:
Code:
find -name "rog*.*" | grep -v denied

Attempting to filter out all the lines in the 'find' output that have 'denied' in them. This doesn't work. I try
Code:
find -name 'rog*.*' > ~/output.txt

on the theory that, after the output gets into the file, I can filter it from there. But it still puts the output on the screen, and creates and empty file.

I'll go try to find my rogue installation another way, but would like to know how to use "find" this way as it's fairly commonly used. What am I doing wrong with it.

I searched for examples, but all the ones I found use "exec", and I didn't want to start down a rabbit warren of other ways to do things. If I find out this is just impossible, that find doesn't work the way other unix commands used to work, then I guess I'll have to.

Moderator's Comments:
Mod Comment
Please use code tags
This User Gave Thanks to arghvark For This Post:
# 2  
Old 02-09-2020
The error msgs usually get redirected to steer. By mapping stderr (2) to stdout (1), you get to do whatever you want...
Code:
find -name "rog*.*" 2>&1 | grep -v denied

# 3  
Old 02-09-2020
This looks more or less like what I need, but I need some help parsing it. When I try to execute the command in the root directory, it says I don't have access, which is fair.

I think of the ">" symbol as "redirect output to a file, I'll tell you what the filename is". I think of "|" as "take this output and feed it into another program", which doesn't require a filename. I can tell that "2" and "1" represent stdout and stderr; is there a way to direct them both to the pipe, instead of the file? AFAIK, I/we don't have to first direct output to a file and then to grep, and in fact I don't know that it will work that way.
# 4  
Old 02-09-2020
2>&1 is an operator which duplicates file descriptors, in this case stderr (2) is duplicated onto stdout (1) (See the Duplicating File Descriptors in the bash manual)

In
Code:
 command1 2>&1 | command2

the combined stderr and stdout from command1 will be piped as stdin to command2
# 5  
Old 02-09-2020
Hmmm. When I enter
Code:
find -name "rog*.*" 2&>1 | grep -v denied

from the root directory, it responds with
Code:
bash: 1: Permission denied

. Is there some reason I would need write permissions on root to execute this?
This User Gave Thanks to arghvark For This Post:
# 6  
Old 02-09-2020
Quote:
Originally Posted by arghvark
Hmmm. When I enter
Code:
find -name "rog*.*" 2&>1 | grep -v denied

from the root directory, it responds with
Code:
bash: 1: Permission denied

. Is there some reason I would need write permissions on root to execute this?

Certainly not. More context please, like the full script and a listing of the directory where this happens.




So you duplicate stderr from stdout to just suppress the error messages, then? Why not redirect stderr to /dev/null in the first place?
# 7  
Old 02-09-2020
There is no script. I am entering this command on the command line.

I'm not just "suppressing the error messages"; I am glad to be reminded about /dev/null, but what I'm trying to do here is understand how to use find in this way -- if it outputs things that I can filter with grep, then how do I pipe the output to the grep command?

I don't know what the contents of the root folder have to do with anything; it hasn't changed since I installed the Raspberry Debian yesterday. In case you can make some use of it, here it is:
Code:
total 72
drwxr-xr-x   2 root root  4096 Feb  5 10:52 bin
drwxr-xr-x   3 root root  3584 Dec 31  1969 boot
drwxr-xr-x  16 root root  3780 Feb  9 11:33 dev
drwxr-xr-x 118 root root  4096 Feb  9 11:19 etc
drwxr-xr-x   3 root root  4096 Feb  5 10:47 home
drwxr-xr-x  17 root root  4096 Feb  5 11:00 lib
drwx------   2 root root 16384 Feb  5 11:22 lost+found
drwxr-xr-x   3 root root  4096 Feb  8 21:46 media
drwxr-xr-x   2 root root  4096 Feb  5 10:42 mnt
drwxr-xr-x   6 root root  4096 Feb  5 10:58 opt
dr-xr-xr-x 152 root root     0 Dec 31  1969 proc
drwx------   4 root root  4096 Feb  5 11:24 root
drwxr-xr-x  25 root root   760 Feb  8 23:28 run
drwxr-xr-x   2 root root  4096 Feb  8 19:16 sbin
drwxr-xr-x   2 root root  4096 Feb  5 10:42 srv
dr-xr-xr-x  12 root root     0 Feb  9 12:09 sys
drwxrwxrwt  13 root root  4096 Feb  9 16:17 tmp
drwxr-xr-x  11 root root  4096 Feb  5 10:53 usr
drwxr-xr-x  12 root root  4096 Feb  9 11:17 var

I know my process does not have write privilege on the folder, I didn't think I would need it, and evidently you don't either.

So my question is -- if this is the correct command, then why am I being told "Permission denied" when I run it?

Previous Thread | Next Thread
Test Your Knowledge in Computers #427
Difficulty: Easy
JavaScript supports only explicit delegation.
True or False?

10 More Discussions You Might Find Interesting

1. Programming

Redirecting output to new file for command "perldoc perllocal"

Hi, I have to redirect output of the command "perldoc perllocal" to new file which contains all the perl module installed. Currently using perldoc perllocal >> mod_data This does not contain all perl modules installed locally on machine, and each character is doubled. Please... (3 Replies)
Discussion started by: asak
3 Replies

2. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

3. Shell Programming and Scripting

What is the right way to redirect script output use ">" or ">>" ?

Which one of the following are more accurate and why? nohup myScript.sh 1>nohup_$(date +%Y%m%d%H%M%S).out 2>&1 & nohup myScript.sh 1>>nohup_$(date +%Y%m%d%H%M%S).out 2>&1 & nohup myScript.sh >nohup_$(date +%Y%m%d%H%M%S).out 2>&1 & nohup myScript.sh >>nohup_$(date +%Y%m%d%H%M%S).out 2>&1 &... (3 Replies)
Discussion started by: kchinnam
3 Replies

4. Shell Programming and Scripting

Using a single "find" cmd to search for multiple file types and output individual files

Hi All, I am new here but I have a scripting question that I can't seem to figure out with the "find" cmd. What I am trying to do is to only have to run a single find cmd parsing the directories and output the different file types to induvidual files and I have been running into problems.... (3 Replies)
Discussion started by: swaters
3 Replies

5. Shell Programming and Scripting

Problem with "find" and "grep" command

I want to list all files/lines which except those which contain the pattern ' /proc/' OR ' /sys/' (mind the leading blank). In a first approach I coded: find / -exec ls -ld {} | grep -v ' /proc/| /sys/' \; > /tmp/list.txt But this doesn't work. I got an error (under Ubuntu): grep:... (5 Replies)
Discussion started by: pstein
5 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. UNIX for Dummies Questions & Answers

Explanation of "total" field in "ls -l" command output

When I do a listing in one particular directory (ls -al) I get: total 43456 drwxrwxrwx 2 root root 4096 drwxrwxrwx 3 root root 4096 -rwxrwxr-x 1 nobody nobody 3701594 -rwxrwxr-x 1 nobody nobody 3108510 -rwxrwxr-x 1 nobody nobody 3070580 -rwxrwxr-x 1 nobody nobody 3099733 -rwxrwxr-x 1... (1 Reply)
Discussion started by: proactiveaditya
1 Replies

8. Shell Programming and Scripting

store the output of "find" command in a variable?

I intend to find the path/full location of a file(filename given by user thru "read filenme") using "find" or any other command and then store it's output in a variable for some other processing. But struggling to put all things together (i.e finding the fully qualified location of that file and... (4 Replies)
Discussion started by: punitpa
4 Replies

9. Shell Programming and Scripting

"find command" to find the files in the current directories but not in the "subdir"

Dear friends, please tell me how to find the files which are existing in the current directory, but it sholud not search in the sub directories.. it is like this, current directory contains file1, file2, file3, dir1, dir2 and dir1 conatins file4, file5 and dir2 contains file6,... (9 Replies)
Discussion started by: swamymns
9 Replies

10. UNIX for Dummies Questions & Answers

the operato < for redirect output "inverse"....

see this cat < Files return the cointent of Files but cat files return the same result WHI??? this command lp -f """PRINTER" < cat files not print the content of files (1 Reply)
Discussion started by: ZINGARO
1 Replies

Featured Tech Videos