From the current directory, I try to find specific subfolders and grep files with specific extension.
sub-folder structure:
.../1/A .../1/B .../2/A .../2/B .../3/A .../3/B
...I want to find each sub-folder contains B in PATH
desired output:
.../1/B .../2/B .../3/B
... in each in this sub-folder (B) I want to run grep, but I get no desired output
grep -ro '...match_pattern...' .../1/B/*.out grep -ro '...match_pattern...' .../2/B/*.out grep -ro '...match_pattern...' .../3/B/*.out
I tried this code, but no luck. Any advise?
readarray LIST < <(find . -type d B | cut -c 3- )
for i in "(LIST[@]}"
do
echo $i/*.out
grep -ro '...match_pattern...' $i*.out
done
I got this and grep looking for two file
NOK outout - grep -ro '...match_pattern...' .../1/B /*.out
desired output - grep -ro '...match_pattern...' .../1/B/*.out
CodePudding user response:
Using globstar option of bash, this could be done in a simpler way without resorting to find command:
shopt -s globstar
grep -o '…PATTERNS…' **/B/*.out
CodePudding user response:
If I understand correctly, you want:
find "$PWD" -name B -type d -print -execdir sh -c 'grep ... *.out' \;
where
$PWDis the current directory; can be substituted with.or any valid directory-name Bis the name of the item you are looking for-type dthe found item should be a directory-printoptionally print out the "hit"-execdirin the directory execute the following command:sh -c '<script>'to prevent expansion of wildcard in "script"grep ... *.outsubstitute your grep command\;required terminator for find
Not sure why you would want to wrap a find in a for loop.
