what's wrong with my -exec in find


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting what's wrong with my -exec in find
# 1  
Old 07-14-2012
what's wrong with my -exec in find

Code:
find ./ -name *Kconfig -exec cat {}  \;

but it won't work with

Code:
find ./ -name *Kconfig -exec cat {} |grep CONFIG_MTD |grep depend \;

how could I handle this
# 2  
Old 07-14-2012
-exec doesn't involve the shell in anyway. pipes are a function of the shell. you probably want to just look into using "/" in "make menuconfig" though to find/read sections...

you can have exec use the shell:
Code:
find . -name 'Kconfig' -exec sh -c 'grep CONFIG_MTD "$1" | grep depend' _ {} \;

with 2.6 Kconfig this seems to do maybe what you want;
Code:
find . -name 'Kconfig' -exec awk '$1=="config"&&$2~/^MTD/{s=$2}s&&/depends/{print s,$0;s=""}' {} \;

can't totally guarantee each of those depends are matched up though.
# 3  
Old 07-14-2012
Quote:
Originally Posted by neutronscott
-exec doesn't involve the shell in anyway. pipes are a function of the shell. you probably want to just look into using "/" in "make menuconfig" though to find/read sections...

you can have exec use the shell:
Code:
find . -name 'Kconfig' -exec sh -c 'grep CONFIG_MTD "$1" | grep depend' _ {} \;

.

and "grep _" here "_" ?



.
Quote:
with 2.6 Kconfig this seems to do maybe what you want;
Code:
find . -name 'Kconfig' -exec awk '$1=="config"&&$2~/^MTD/{s=$2}s&&/depends/{print s,$0;s=""}' {} \;

can't totally guarantee each of those depends are matched up though.
# 4  
Old 07-14-2012
Quote:
Originally Posted by yanglei_fage
Code:
find ./ -name *Kconfig -exec cat {}  \;

but it won't work with

Code:
find ./ -name *Kconfig -exec cat {} |grep CONFIG_MTD |grep depend \;

how could I handle this
You would get the desired result if you just piped the output of the first find into the greps. If your find supports -exec ... {} +, it would be more efficient.

However, the cat is unnecessary. The first grep can replace it in find's -exec.

You also need to quote -name's pattern argument.

Regards,
Alister

Last edited by alister; 07-14-2012 at 01:27 AM..
# 5  
Old 07-14-2012
Quote:
Originally Posted by alister
You would get the desired result if you just piped the output of the first find into the greps. If your find supports -exec ... {} +, it would be more efficient.

However, the cat is unnecessary. The first grep can replace it in find's -exec.

You also need to quote -name's pattern argument.

Regards,
Alister

I want to use find and then do the two operation for its output {}, can you give an examples?


Lei
# 6  
Old 07-14-2012
Quote:
Originally Posted by yanglei_fage
Code:
find ./ -name *Kconfig -exec cat {}  \;

but it won't work with

Code:
find ./ -name *Kconfig -exec cat {} |grep CONFIG_MTD |grep depend \;

how could I handle this
With this command you will output the names of the files in present dir whose name ends in Kconfig and for each of the found files it will show the entire lines containing both CONFIG_MTD and depend strings and the number of the matching lines:

Code:
find ./ -name '*Kconfig' -print0 | xargs -0 grep -n CONFIG_MTD | grep depend


Last edited by Tribe; 07-16-2012 at 02:51 PM..
This User Gave Thanks to Tribe For This Post:
# 7  
Old 07-14-2012
Quote:
find ./ -name *Kconfig -exec cat {} |grep CONFIG_MTD |grep depend \;
Quick answer to post #1 is to not use exec or cat.
Code:
find ./ -type f -name '*Kconfig' -print | while read filename
do
      grep "CONFIG_MTD" "${filename}" |grep "depend"
done



Please remember to post what Operating System you have and what Shell you use.

Last edited by methyl; 07-15-2012 at 09:59 AM.. Reason: added missing quotes on filename
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Executing perl script in Linux gives :Exec format error. Wrong Architecture

i have perl script that used to be working great , once i edit it in windows and convert it to UTF-8 and then via FTP return it . also did: chmod +x foo.pl and then when i try to run it : ./foo.pl im getting this error: ./foo.pl: Exec format error. Wrong Architecture.... (4 Replies)
Discussion started by: umen
4 Replies

2. Shell Programming and Scripting

2 exec in find

Guys, I want to find the log files greather than 23 days and i want to perform 2 things here. one is to list the files and second is to gzip the files. hope this can be done using sh -c option. but not sure the exact command. find . -name "*.log" -mtime +23 -exec ls -la {} \; ... (5 Replies)
Discussion started by: AraR87
5 Replies

3. Shell Programming and Scripting

find: missing argument to `-exec' while redirecting using find in perl

Hi Friends, Please help me to sort out this problem, I am running this in centos o/s and whenever I run this script I am getting "find: missing argument to `-exec' " but when I run the same code in the command line I didn't find any problem. I am using perl script to run this ... (2 Replies)
Discussion started by: ramkumarselvam
2 Replies

4. Ubuntu

Find and EXEC

This is a huge issue. and I need it fixed ASAP. account-system gate-system race_traffic_sensor achievement-system global race_voicepack admin glue-system realdriveby admin-system gps realism-system... (5 Replies)
Discussion started by: austech360
5 Replies

5. Ubuntu

Find and exec

Hello, I am a linux newbe. I want to install a program. I can download it only with wget command from internet. As far as i know this wget command does not transfer the exacutable flags. Because of that i wanted to find all configure files and change their mod to 744. I found this... (1 Reply)
Discussion started by: disconnectus
1 Replies

6. UNIX for Dummies Questions & Answers

Find Exec

Hello All, Is there a way to make exec do a couple of operations on a single input from find? For example, find . -type d -exec ls -l "{}" ";" I would like to give the result of each "ls -l" in the above to a wc. Is that possible? I want to ls -l | wc -l inside... (1 Reply)
Discussion started by: prasanna1157
1 Replies

7. Shell Programming and Scripting

Using MV FIND and -EXEC

Hi, i would like to rename files in directories and subdirs. Files contains specific french or strange caracters. I want to replace all non alpha-numerics by _ (underscore) First, i made this, but i think the "for" is limited. How can i do this directly by FIND ? for file in $(find .... (0 Replies)
Discussion started by: degraff63
0 Replies

8. Shell Programming and Scripting

| with find -exec

can we use |(pipe operator) with find -exec.....? or can pipe the output of find command to another command...? if not, why...? pls explain (3 Replies)
Discussion started by: vijay_0209
3 Replies

9. UNIX for Advanced & Expert Users

Using a pipe with find .... -exec ...

Hi, I am trying to run the following command: find ./ -name lea_01.001 -print -exec CEOS {} | grep -i radio \; where "CEOS" converts the lea_01.001 files to text, then grep looks for the string "radio." This however does not work as I have constructed it. This command mostly works, but... (1 Reply)
Discussion started by: pmallas
1 Replies

10. UNIX for Advanced & Expert Users

find and exec

Hi, Happy new year. Would you be so kind to explain me what does this instruction : find /rep/app -type l -exec ls -l {} \;> allink.lst Many thanks. (2 Replies)
Discussion started by: big123456
2 Replies
Login or Register to Ask a Question