Wie kopiere ich den Inhalt von Dateien aus einer Befehlszeilensuche in eine einzelne Datei?

Wie kopiere ich den Inhalt von Dateien aus einer Befehlszeilensuche in eine einzelne Datei?

Den Inhalt aller Suchergebnisse in eine einzige Datei kopieren. Ich möchte nicht das Suchergebnis kopieren, sondern den Dateiinhalt des Suchergebnisses.

Beispielsweise hat mein Suchergebnis eine Liste mit 10 Dateien zurückgegeben und ich möchte den Inhalt dieser 10 Dateien in eine einzige Datei kopieren (z. B. dump.test).

Antwort1

Mit GNU grepund xargs:

grep -rlZ search-text some/dir/ | xargs -r0 cat > dump.test

-ldient zum Auflisten der Dateien, die mindestens eine Zeile enthalten, die mit übereinstimmt search-text. -Zdient zum Drucken dieser Zeile mit NUL-Trennzeichen, sodass sie sicher an übergeben werden kann xargs -0.

-rum alle darin enthaltenen Dateien some/dir/rekursiv zu durchsuchen.

POSIX:

find some/dir -type f -size +0 -exec grep -q search-text {} \; 
   -exec cat {} + > dump.test

Dies ist weniger effizient, da in diesem Fall ein grepBefehl pro nicht leerer Datei ausgeführt wird.

verwandte Informationen