Ik probeer een commando te vinden of een Linux-script te maken dat deze twee commando’s kan uitvoeren en de otuput kan weergeven
find . -name '*bills*' -print
hiermee worden alle bestanden afgedrukt
./may/batch_bills_123.log
./april/batch_bills_456.log
..
van dit resultaat wil ik een grep doen voor een woord. Ik doe dit nu handmatig
grep 'put' ./may/batch_bill_123.log
en ontvang
sftp > put oldnet_1234.lst
Ik hoop de bestandsnaam en de overeenkomst te krijgen.
./may/batch_bills_123.log sftp > put oldnet_1234.lst
..
..
and so on...
enig idee?
Antwoord 1, autoriteit 100%
U zoekt de optie -H
in gnu grep.
find . -name '*bills*' -exec grep -H "put" {} \;
Hier is de uitleg
-H, --with-filename
Print the filename for each match.
Antwoord 2, autoriteit 54%
Nu de vraag duidelijker is, kun je dit in één keer doen grep
grep -R --include "*bills*" "put" .
Met relevante vlaggen
-R, -r, --recursive
Read all files under each directory, recursively; this is
equivalent to the -d recurse option.
--include=GLOB
Search only files whose base name matches GLOB (using wildcard
matching as described under --exclude).
Antwoord 3, Autoriteit 6%
of misschien nog gemakkelijker
grep -R put **/*bills*
De **
GLOB SYNTAX betekent “elke diepte van de directories”. Het werkt in Zsh, en ik denk ook dat recente versies van bash ook.
Antwoord 4
grep -l "$SEARCH_TEXT" $(find "$SEARCH_DIR" -name "$TARGET_FILE_NAME")