2016-05-23 24 views
2

Ich führe diesen Befehl aus, um alle meine Dateien zu finden, die (mit Hilfe von Regex) "someStrings" in einem Baumverzeichnis enthalten.wie man Dateien kopiert, die mit grep gefunden wurden

grep -lir '^beginString' ./ -exec cp -r {} /home/user/DestinationFolder \; 

Es gefundene Dateien wie folgen aus:

FOLDER 
a.txt 
-->SUBFOLDER 
    a.txt 
---->SUBFOLDER 
    a.txt 

ich alle Dateien und Ordner kopiert werden soll, mit dem gleichen Schema, in die Zielordnern, aber ich weiß nicht, wie es zu tun. Es ist wichtig, Dateien und Ordner zu kopieren, da mehrere Dateien denselben Namen haben und ich sie behalten muss.

Antwort

3

Versuchen Sie folgendes:

find . -type f -exec grep -q '^beginString' {} \; -exec cp -t /home/user/DestinationFolder {} + 

oder

grep -lir '^beginString' . | xargs cp -t /home/user/DestinationFolder 

Aber wenn Sie Verzeichnisstruktur behalten möchten, können Sie:

grep -lir '^beginString' . | tar -T - -c | tar -xpC /home/user/DestinationFolder 

oder wenn wie ich, Du am liebsten sein sicher über die Art der Datei, die Sie speichern (nur Datei, keine Symlinks), könnten Sie:

find . -type f -exec grep -l '^beginString' {} + | tar -T - -c | 
    tar -xpC /home/user/DestinationFolder 
+0

genial, es funktioniert !!! Ich kwon nicht wie es geht aber funktioniert! Der Befehl macht einige Backup-Dateien, ich löschte es manuell und in Ordnung. Danke mein Freund!!! Du hast mein Leben gerettet – user6372336