Werken met xenserver, en ik wil een commando uitvoeren op elk bestand dat zich in een map bevindt, wat dingen uit de uitvoer van het commando halen en het in een bestand toevoegen.
Ik ben duidelijk over het commando dat ik wil gebruiken en hoe ik string(s) eruit kan halen als dat nodig is.
Maar wat mij niet duidelijk is, is hoe ik deze opdracht op elk bestand kan laten uitvoeren en naar het volgende kan gaan, totdat er geen bestanden meer worden gevonden.
Antwoord 1, autoriteit 100%
grep $PATTERN *
zou voldoende zijn. Standaard zou grep alle submappen overslaan. Als je er echter doorheen wilt, is grep -r $PATTERN *
het geval.
Antwoord 2, autoriteit 91%
In Linux gebruik ik dit commando normaal gesproken om recursief grep
voor een bepaalde tekst in een map:
grep -rni "string" *
waar
r
= recursief, d.w.z. zoek naar submappen binnen de huidige mapn
= om de regelnummers af te drukken naarstdout
i
= hoofdletterongevoelig zoeken
Antwoord 3, autoriteit 15%
Gebruik zoeken. Serieus, het is de beste manier, want dan kun je echt zien op welke bestanden het draait:
find . -name "*.sql" -exec grep -H "slow" {} \;
Let op, de -H is mac-specifiek, het toont de bestandsnaam in de resultaten.
Antwoord 4, autoriteit 4%
Als u in alle submappen wilt zoeken, maar alleen in specifieke bestandstypen, gebruikt u grep met --include
.
Bijvoorbeeld recursief zoeken in de huidige directory, naar tekst in *.yml en *.yaml :
grep "text to search" -r . --include=*.{yml,yaml}
Antwoord 5
Als u meerdere opdrachten wilt uitvoeren, kunt u het volgende gebruiken:
for I in `ls *.sql`
do
grep "foo" $I >> foo.log
grep "bar" $I >> bar.log
done