Wie suche ich in einem Verzeichnis nach Dateien, die einen bestimmten Text enthalten, und kopiere sie in ein anderes Verzeichnis? Ich verwende die .ksh-Shell.
Antwort1
Tun Sie es man xargs
und schauen Sie sich die -I
Flagge an.
find /path/to/directory -type f -exec grep -il "your pattern" {} \; | xargs -I % cp % /dest/dir/
Um Tipparbeit zu sparen, geben Sie diesen Befehl in ein Shell-Skript ein:
#!/usr/bin/ksh
# Script name: locate
find /path/to/directory -type f -exec grep -il "$1" {} \; | xargs -I % cp % /dest/dir/
locate searchstring
Geben Sie zum Ausführen searchstring
den gesuchten Text ein.
Antwort2
Sie können einfach vom Basisverzeichnis aus suchen
cp $(grep -r -l "the pattern" *) target_directory
grep -r
bedeutet rekursiv-l
bedeutet, dass der Dateipfad aufgelistet wird, nicht die Übereinstimmung darin.Durch das
$()
Umgeben des Befehls wird dieser ausgeführt und das Ergebnis an die Stelle im äußeren Befehl gestellt.cp nimmt eine Liste von Dateien und kopiert sie alle dorthin, sofern der letzte Pfad ein Verzeichnis ist.